1. 程式人生 > >Flask 之裝飾器有關

Flask 之裝飾器有關

 - 先記住一句話:自定義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所以會報上面的錯誤

解決方法

在裝飾external中新增@wraps(func)就可以正常運行了

@functools.wraps(func)的作用就是保留原有函式的名稱和docstring