Я пытаюсь реализовать флажок-логин в своем приложении, в котором также используется фляжка-монгоингин. Вот мой пользователь прото:Flask-mongoengine document id
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)
с моей точки зрения входа в систему, он вызывает get_id
метод User
, но self._id
возвращает None
. Я также попробовал self.id
с тем же результатом. Затем я попытался добавить _id
поле явно:
class User(db.Document, UserMixin):
_id = db.ObjectIdField(default=bson.ObjectId())
, но затем, self._id
дает мне 'User u'username'>
вместо идентификатора пользователя.
У вас есть представление о том, как восстановить _id
пользователя?
спасибо, но нет, нет атрибута не user_id :(Тем не менее, я нашел обходной путь используя pymongo ie user._get_collection() и запрос find_one. Я отправлю его ... – GuillaumeA