Flask-Login:特定属性的错误
Flask-Login: Errors With Specific Attributes
我正在尝试创建和使用与 Flask-Login 一起使用的用户函数,如下所示:
class User(db.Model):
username = db.Column(db.String(80), primary_key=True)
passhash = db.Column(db.String(160))
posts = db.relationship('Idea', backref='user')
def __init__(self, username, password):
self.username = username
self.passhash = generate_password_hash(password)
def __str__(self):
return "User: " + self.username + " Hash: " + self.passhash
# Managing passwords using Werkzeug security library
def check_password(self, password):
return check_password_hash(self.passhash, password)
# Necessary functions for Flask-Login session management
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
# Anonymous users aren't supported
return False
def get_id(self):
return unicode(self.username)
但是,当尝试使用此代码时,我看到错误:
AttributeError: 'User' object has no attribute 'is_active'
遇到 this answer,我试图通过将函数从 class User(db.Model)
更改为 class User(db.Model, UserMixin)
来解决此问题,尽管我是手动实现这些方法。这样做消除了上述错误,我开始看到:
NotImplementedError: No id
attribute - override get_id
我在这里做错了什么?虽然我没有名为 id
的属性,但我已经设置了 get_id
函数(如上所述)。上面的函数没有被提取是否有特殊原因?
尤其是当我将 user = User.query.get(form.username.data)
传递给 login_user()
时会出现错误。
您是如何设置 user_loader 的?您必须像这样向它传递一个用户实例:
@login_manager.user_loader
def load_user(user_id):
return User.query.filter(User.id == int(user_id)).first()
备查,代码实现没有问题。事实证明,我的文本编辑器在某些地方混合了缩进和空格,导致了奇怪的错误。
您应该在用户中添加 id 列 class
id = db.Column(db.Integer, primary_key = True)
然后设置user_loader
@login_manager.user_loader
def load_user(id):
return User.query.filter(User.id==int(id)).first()
我正在尝试创建和使用与 Flask-Login 一起使用的用户函数,如下所示:
class User(db.Model):
username = db.Column(db.String(80), primary_key=True)
passhash = db.Column(db.String(160))
posts = db.relationship('Idea', backref='user')
def __init__(self, username, password):
self.username = username
self.passhash = generate_password_hash(password)
def __str__(self):
return "User: " + self.username + " Hash: " + self.passhash
# Managing passwords using Werkzeug security library
def check_password(self, password):
return check_password_hash(self.passhash, password)
# Necessary functions for Flask-Login session management
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
# Anonymous users aren't supported
return False
def get_id(self):
return unicode(self.username)
但是,当尝试使用此代码时,我看到错误:
AttributeError: 'User' object has no attribute 'is_active'
遇到 this answer,我试图通过将函数从 class User(db.Model)
更改为 class User(db.Model, UserMixin)
来解决此问题,尽管我是手动实现这些方法。这样做消除了上述错误,我开始看到:
NotImplementedError: No
id
attribute - overrideget_id
我在这里做错了什么?虽然我没有名为 id
的属性,但我已经设置了 get_id
函数(如上所述)。上面的函数没有被提取是否有特殊原因?
尤其是当我将 user = User.query.get(form.username.data)
传递给 login_user()
时会出现错误。
您是如何设置 user_loader 的?您必须像这样向它传递一个用户实例:
@login_manager.user_loader
def load_user(user_id):
return User.query.filter(User.id == int(user_id)).first()
备查,代码实现没有问题。事实证明,我的文本编辑器在某些地方混合了缩进和空格,导致了奇怪的错误。
您应该在用户中添加 id 列 class
id = db.Column(db.Integer, primary_key = True)
然后设置user_loader
@login_manager.user_loader
def load_user(id):
return User.query.filter(User.id==int(id)).first()