首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-mongoengine文档id

Flask-mongoengine文档id
EN

Stack Overflow用户
提问于 2016-04-12 00:43:53
回答 2查看 2.3K关注 0票数 1

我正在尝试在我的应用程序中实现flask-login,它也使用flask-mongoengine。下面是我的用户原型:

代码语言:javascript
复制
class User(db.Document, UserMixin):
    username = db.StringField(max_length=80)
    email = db.StringField(max_length=255, unique=True)
    password = db.StringField(max_length=255, required=True)
    active = db.BooleanField(default=True)

    def __init__(self, *args, **kwargs):
        super(db.Document, self).__init__(self)
        try:
            self.username = kwargs['username']
            self.email = kwargs['email']
            self.password = kwargs['password']
        except:
            flash('Bad arguments for User')

    @staticmethod
    def salt_password(password):
        return generate_password_hash(password)

    @property
    def is_authenticated(self):
        return True

    @property
    def is_active(self):
        return self.active

    @property
    def is_anonymous(self):
        return False

    def get_id(self):
        return unicode(self._id)

    def __repr__(self):
        return '<User %r>' % (self.username)

    def check_pwd(self, password):
        return check_password_hash(self.password, password)

但是,当我从登录视图调用login_user(user)函数时,它调用Userget_id方法,但self._id返回None。我也尝试了self.id,也得到了同样的结果。然后,我尝试显式地添加_id字段:

代码语言:javascript
复制
class User(db.Document, UserMixin):
    _id = db.ObjectIdField(default=bson.ObjectId())

但是,self._id给了我'User u'username'>而不是用户id。

你知道如何检索用户的_id吗?

EN

回答 2

Stack Overflow用户

发布于 2016-04-12 01:43:00

我找到了解决此问题的方法。我的用户原型更新如下,使用pymongo:

代码语言:javascript
复制
def get_id(self):
    user_queried = self._get_collection().find_one({'username':self.username, 'email':self.email, 'password':self.password})
    if user_queried is not None:
        return unicode(user_queried['_id'])
    else:
        return 'None'
票数 1
EN

Stack Overflow用户

发布于 2017-05-30 18:40:11

虽然我不知道你的问题是否还需要答案--你找到了一个解决方案,但你的问题已经过时了。但是如果其他人来了,我用下面的代码解决了这个问题:

代码语言:javascript
复制
from mongoengine import Document, StringField, FloatField, BooleanField

class User(Document):

name = StringField(primary_key=True, required=True, max_length=50)
mail = StringField(required=True, max_length=255)
password = StringField(required=True, max_length=80)
first_name = StringField(max_length=255)
second_name = StringField(max_length=255)
authenticated = True  # BooleanField(required=True, default=True)
is_active = True  # BooleanField(required=True, default=True)

meta = {'db_alias': 'users'}

@property
def is_authenticated(self):
    return True

@property
def is_active(self):
    return True

@property
def is_anonymous(self):
    return False

def get_id(self):
    return self.name

并添加了以下user_loader

代码语言:javascript
复制
@login_manager.user_loader
def load_user(user_id):
    user = User.objects(name=user_id)[0]
    return user
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36554545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档