我正在尝试在我的应用程序中实现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)
函数时,它会调用 User
的 get_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/