@functools.wraps(func)


 - 先記住一句話:自定義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地址標志 ,此參數默認是視圖名,只要設置了,視圖名就會被覆蓋

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM