- 先記住一句話:自定義python裝飾器時一定要記住使用@functools.wraps(func)修飾wrapper
- 在Flask中使用裝飾器遇到AssertionError: View function mapping is overwriting an existing...
- 報錯的大概意思就是存在相同的view,在flask中,如果定義了兩個相同函數名的view,就會報這種報這種錯誤,例如:
- 但是上例中的兩個函數名分別是index和course,是不相同的,為什么會報這種錯?
- 我經過查找發現,這是因為python裝飾器本質上就是函數的鏈式調用
- 對於app.route這個方法而言,傳入的方法都是external,而不是更深一層的index和course所以會報上面的錯誤
解決方法
- 1 在裝飾external中添加@wraps(func)就可以正常運行了
@functools.wraps(func)的作用就是保留原有函數的名稱和docstring
- 2 endpoint 反向生成url地址標志 ,此參數默認是視圖名,只要設置了,視圖名就會被覆蓋