在 Web 應用中,有時需要在響應請求前或者響應請求后做一些處理,為了讓每個視圖函數避免編寫重復功能的代碼,Flask 提供了請求鉤子,它們可以用來注冊在請求處理的不同階段執行的處理函數,我們就可以輕易的對請求進行預處理和后處理。
Flask 常用請求鉤子如下:
-
before_first_request
:在處理第一個請求之前運行 -
before_request
:在每次請求之前運行,如果沒有未處理的異常拋出,會在每個請求結束后運行 -
after_request
:如果沒有未處理的異常拋出,在每次請求結束后運行 -
teardown_request
:即使有未處理的異常拋出,也會在每個請求結束后運行
這些請求鉤子是使用裝飾器方式實現,用法也非常簡單,使用起來和app.route()
裝飾器基本相同。下面使用這些請求鉤子裝飾一些函數,用于在每次請求前后做一些處理,為了方便理解,只是單純打印一句話。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
@app .before_first_request def before_first_request(): print ( 'before_first_request' ) @app .before_request def before_request(): print ( 'before_request' ) @app .after_request def after_request(response): print ( 'after_request' ) return response @app .teardown_request def teardown_request(e): print ( 'teardown_request' ) @app .route( '/test' ) def test(): return 'test' |
第一次請求控制臺輸出:
第二次請求控制臺輸出:
下面是請求鉤子的一些常見應用場景:
-
before_first_request
:第一個請求之前運行,可以進行一些 Web 程序的初始化操作 -
before_request
:每次請求之前運行,可以進行數據庫連接的創建操作、用戶的權限校驗操作等 -
after_request
:我們經常在視圖函數中進行數據庫操作,比如更新、插入,之后需要將更改提交到數據庫中,提交更改的代碼就可以放到after_request
鉤子注冊的函數中 -
teardown_request
:可以接收視圖函數的異常,一般用來記錄錯誤日志
注意: 每個請求鉤子可以注冊任意多個處理函數,函數名也并不是必須和鉤子名稱相同。如果有多個 before_request,執行順序從上往下;after_request 接收一個響應對象,并且返回同一個或者更新后的響應對象,多個 after_request 執行順序是從下往上。
到此這篇關于Flask 請求鉤子的實現的文章就介紹到這了,更多相關Flask 請求鉤子內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://juejin.cn/post/7030956915853099016