2016-11-14 109 views
-1

烧瓶登录中使用时,我一直在它与我的一个星期,现在想了解以下两个功能之间的differrence应用@ login_manager.user_loader功能净度上烧瓶登录

@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 /月/ 2016五点24分35秒]“GET /欢迎HTTP/1.1” 302 - 127.0.0.1 - - [14 /月/ 2016 5点24分35秒] “GET /登录下一=%2Fwelcome HTTP/1.1?” 200 -

但只有后者的功能实际上重定向我欢迎页面

前者功能(在上面的第一功能),显示了日志相同,但它不我重定向到欢迎页面,而是显示了我这个消息

login_manager.login_message = U “请登录访问此页面。”就像你正在使用SQLAlchemy的,我的权利

谁能解释这些

+1

'email'是你的用户表的主键吗?可能不会。 'Model.query.get'根据主键进行查找。你的第一个功能很可能是基于错误的字段进行查询。 – dirn

+0

(User_id和email是复合键)user_id是主键,电子邮件也是主键。 – Chamambom

+0

删除裸露的excepts(坏模式)并查看实际错误。 – davidism

回答

0

它看起来有什么区别?

在第一个功能,你正在做一个SELECT与看起来像SELECT * FROM user WHERE email=XXX WHERE子句。

在第二个功能,你这样做是基于“用户”表的主键的选择。如果主键列名为p,那看起来像SELECT * FROM user WHERE p=XXX

也许电子邮件是不是你的用户表的主键,所以第一个函数返回None

+0

,是的,我使用Flask-SQLAlchemy .....我认为你的解释可能会验证我也在想什么。 – Chamambom