Python 烧瓶登录的@login_manager.user_loader函数的清晰性
我已经用我的应用程序做了一周了,现在我试图理解在flask登录中使用的以下两个函数之间的区别Python 烧瓶登录的@login_manager.user_loader函数的清晰性,python,flask,Python,Flask,我已经用我的应用程序做了一周了,现在我试图理解在flask登录中使用的以下两个函数之间的区别 @login_manager.user_loader def load_user(email): try: return User.query.filter(User.email == email).first() except: return None @login_manager.user_loader def load_user(email): try: r
@login_manager.user_loader
def load_user(email):
try:
return User.query.filter(User.email == email).first()
except:
return None
@login_manager.user_loader
def load_user(email):
try:
return User.query.get(email)
except:
None
这两个功能都通过“在我的/登录路径中打印”来显示正确的日志,如下所示
127.0.0.1--[14/Nov/2016 05:24:35]“获取/欢迎HTTP/1.1”302-
127.0.0.1---[14/Nov/2016 05:24:35]“获取/登录?下一步=%2F欢迎HTTP/1.1”200-
但实际上只有后一个函数将我重定向到欢迎页面
前一个函数(顶部的第一个函数)在日志上显示相同的内容,但它不会将我重定向到欢迎页面,而是显示此消息
login\u manager.login\u message=u“请登录以访问此页面。”
有人能给我解释一下这两者的区别吗?看起来你在使用SQLAlchemy,对吗 在第一个函数中,您使用WHERE子句执行SELECT操作,该子句类似于
SELECT*FROM user WHERE email=XXX
在第二个函数中,您正在基于“user”表的主键进行选择。如果主键列名为p,则看起来像是SELECT*FROM user,其中p=XXX
可能电子邮件不是用户表的主键,因此第一个函数返回
None
是否email
是用户表的主键?可能不会Model.query.get
基于主键进行查找。您的第一个函数很可能是基于错误的字段进行查询。(User_id和email是复合键)User_id是主键,email也是主键。是的,我正在使用Flask SQLAlchemy…。我想您的解释可能也验证了我的想法。