我一直在尝试在我的烧瓶应用程序中使用烧瓶登录进行身份验证。在尝试实现这样的user_loader时:
@login_manager.user_loader
def load_user(id):
return User.get_id(id)
我收到错误
未实现错误:无
id
属性 - 覆盖get_id
我的用户类定义如下:
class User(Base, UserMixin):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
email = Column(String(70), unique=True)
userName = Column(String(40), unique=True)
password = Column(String(150))
#def get_id(self):
# return (self.id)
我尝试重写 get_id 方法,如您在 User 类中看到的那样。它只是给了我错误
属性错误:"str"对象没有属性"id">
我错过了什么?为什么找不到 id 属性?
您在覆盖中正确地实现了id
变量的 getter,但我认为您误解了如何使用代码中的函数通过 id 加载用户。在被覆盖的函数中,get_id
除了self
之外不带任何参数,因为该函数只返回用户的 id。但是,您尝试将其用作从其 id 加载用户的函数。我们得到这个特定错误的原因是,通过调用User.get_id(id)
,你用self=id
调用get_id
,并且由于id
是一个str
,我们从尝试获取不存在的id
的id
属性中获得AttributeError
。
尝试使用get
而不是get_id
(如本教程所示)。 这样,返回值就是具有所需id
的User
实例
@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))