2016-11-14 202 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