@functools.wraps(func)

 - 先記住一句話:自定義python裝飾器時必定要記住使用@functools.wraps(func)修飾wrapperpython

- 在Flask中使用裝飾器遇到AssertionError: View function mapping is overwriting an existing...flask

 - 報錯的大概意思就是存在相同的view,在flask中,若是定義了兩個相同函數名的view,就會報這種報這種錯誤,例如:app

 

 - 可是上例中的兩個函數名分別是index和course,是不相同的,爲何會報這種錯?函數

 - 我通過查找發現,這是由於python裝飾器本質上就是函數的鏈式調用url

 - 對於app.route這個方法而言,傳入的方法都是external,而不是更深一層的index和course因此會報上面的錯誤spa

解決方法blog

 -  1 在裝飾external中添加@wraps(func)就能夠正常運行了 string

@functools.wraps(func)的做用就是保留原有函數的名稱和docstringit

 - 2 endpoint   反向生成url地址標誌 ,此參數默認是視圖名,只要設置了,視圖名就會被覆蓋io

本站公眾號
   歡迎關注本站公眾號,獲取更多信息