python - Flask-mongoengine 文档 id

标签 python mongodb flask flask-mongoengine

我正在尝试在我的应用程序中实现flask-login,该应用程序也使用flask-mongoengine。这是我的用户原型(prototype):

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)

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

class User(db.Document, UserMixin):
    _id = db.ObjectIdField(default=bson.ObjectId())

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

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

最佳答案

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

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'

关于python - Flask-mongoengine 文档 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36554545/

相关文章:

python - 以列表和字典的组合对值进行分组

javascript - 使用 Node.js 和 MongoDB 存储密码

java - 带有地理空间查询的 MongoDb $and 运算符

python - Python 中的 webargs/Marshmallow 可以修改字段,而不仅仅是验证它吗?

python - 比较 Python/Django 中的两个查询集

python - Django Heroku Postgres - 编程错误 : relation does not exist

python - 使用 Python 或 Bash 删除 PDF 的最后一页

mongodb - MongoDB 中动态字段的用途是什么?

python - 在 virtualenv 中安装 Flask "command not found"

python - 无法安装flask-mysqldb