1 問題描述
寫了一個登陸認證裝飾器, 部分試圖,只有使用者登陸才能訪問
def login_wrapper(func): def inner(*args, **kwargs): """ 判斷是否登陸 若是 進入檢視函式 否則 重定向到登陸頁面 """ if IS_LOGIN['is_login']: res = func(*args, **kwargs) return res return redirect('/login') return inner
啟動專案後遇到如下報錯:
AssertionError: View function mapping is overwriting an existing endpoint function: inner
2 報錯重現
原來如果把函式名寫重,就會導致出現該報錯
但是這裡檢視函式名並沒有問題,為什麼也出現了這個問題?
查資料後得知,是 裝飾器 出現了問題!
經過 裝飾器 裝飾之後的函式,它們的 __name__ 已經從原來的函式名變成 inner,也就是變成了裝飾器內部的函式名稱
我們可以透過列印函式的 __name__ 看到這一結果:
3 解決
1) 給inner._ _name_ _設定唯一值
2) 路由中給引數endpoint設定唯一值