在Flask中鉤子函數是使用特定的裝飾器裝飾的函數。爲何叫鉤子函數呢?是由於鉤子函數能夠在正常執行的代碼中,插入一段本身想要執行的代碼。那麼這種函數就叫作鉤子函數。html
部署後處理第一次請求以前執行,當執行第二次的時候,則不會再執行此鉤子函數flask
在每次請求以前執行。一般能夠用這個裝飾器來給視圖函數增長一些變量,好比下面的例子app
在使用Jinja2模板時候自定義過濾器。函數
@app.route('/') def index(): context = { 'article': 'hello, this is test hello world' } return render_template('index.html', **context) @app.template_filter('cut') #把cut函數註冊到過濾器中 def cut(value): #value就是使用過濾器的變量 value = value.replace('hello', '') return value #函數的返回值會做爲過濾器的返回值
index.htmlthis
{{ article|cut }}
使用這個鉤子函數,必須返回一個字典,這個字典的值在全部模板中均可以使用。若是在一些模板中都要用到的變量,那麼就可使用這個鉤子函數來返回,而不用再每一個視圖函數中的render_template中去寫,這樣可讓代碼更加簡潔容易維護。spa
以下:code
a.htmlhtm
{{ name }}
b.html對象
{{ name }}
查看結果blog
注意:
由於這個鉤子函數必須返回字典,所以當有作條件判斷的時候,無論是True仍是Flase都應該返回字典,就算你什麼數據都不想取,也應該傳一個空字典,不然會報錯不是一個可迭代的對象
@app.context_processor def context_processpor(): if xxxxx: return {'name': 'heboan'} return {}
在發生一些異常的時候,好比40四、500、400等錯誤。那麼想要優雅的處理這些錯誤,就可使用errorhandler
訪問首頁(想要看到效果,把DEBUG模式關閉)
訪問不存在的頁面
咱們可使用flask.abort手動拋出相應的錯誤,以下
訪問首頁