Flask的請求鉤子與上下文簡覽

2022-03-02 21:58:15 字數 1530 閱讀 1808

在客戶端和伺服器互動的過程中,有些準備工作或掃尾工作需要處理,比如:在請求開始時,建立資料庫連線;在請求結束時,指定資料的互動格式。為了讓》每個檢視函式避免編寫重複功能的**,flask提供了通用設施的功能,即請求鉤子。通過請求鉤子,我們可以對請求進行預處理(preprocessing)和後處理》(postprocessing)。

flask的請求鉤子通過裝飾器實現,每個鉤子可以註冊任意多個處理函式,預設的五種請求鉤子如下:

鉤子說明

before_first_request

註冊乙個函式,在處理請求前執行

before_request

註冊乙個函式,在處理每個請求前執行

after_request

註冊乙個函式,如果有未處理的一場丟擲。會在每個請求結束後執行

teardown_request

註冊乙個函式,即使有未處理的異常丟擲,會在每個請求介紹後執行。如果發生異常,會傳入異常物件作為引數註冊到函式中

after_this_request

在檢視函式內註冊乙個函式,在這個請求結束後執行

假如我們建立了三個檢視函式a、b、c,其中檢視c使用了after_this_request鉤子,那麼當請求a進入後,整個請求處理週期的請求處理函式呼叫流程如圖:

我們知道,flask將請求報文封裝在request物件中。按照一般的思路,如果我們要在檢視函式中使用它,就得把它作為引數傳入檢視函式,就像我們接收url變數一樣。但這樣就會導致大量的重複,而且增加了的程式的負擔。

不一般的是,我們可以從flask匯入乙個全域性的request變數,在檢視函式中直接呼叫request的屬性獲取資料。這是為什麼?因為flask會在每個請求產生後後自動啟用當前請求的上下文,啟用請求上下文後,request被臨時設定為全域性可訪問。在每個請求結束後,flask就會銷毀對應的請求上下文。

flask提供的四個上下文全域性變數如下:

變數名上下文類別

說明程式上下文

指向處理請求的當前程式例項

g程式上下文

替代python的全域性變數用法,確保僅在當前請求可用,用於儲存全域性資料,每次請求都會重設

request

請求上下文

封裝客戶端發出的請求報文資料

session

請求上下文

用於記住請求之間的資料,通過簽名的cookie實現

請求進入時,flask會自動啟用請求上下文,此時程式上下文也被自動啟用。請求處理完畢後,請求上下文和程式上下文也會自動銷毀。兩者具有相同的生命週期。

手動啟用的方法:

使用push()方法啟用程式上下文

請求上下文可以通過test_request_context()方法臨時建立

>>> from flask import request

... request.method

'get'

參考:

flask請求鉤子 請求上下文

from flask import flask from flask import redirect,url for,abort 在第一次請求之前呼叫,可以在當前的方法中初始化操作 def before first request print before first request 在每一次請求之...

flask筆記4 上下文與請求鉤子

table of contents 01上下文 02請求鉤子 04 flask script擴充套件命令列 背景 可以直接從request物件獲取引數 django是通過檢視函式傳入request物件,屬於區域性變數 def index request flask中request是全域性變數,多個執...

flask 請求鉤子 上下文 綜合認證

1.請求鉤子 請求鉤子就是就是在客戶端發起請求的時候,對各個階段進行監聽和處理,這可以完成一些統一的處理,減少 冗餘。類似於中介軟體或前後置 主要有以下四種請求鉤子 before first request before request after request teardown request ...