什么是中間件呢,"中間件"是一個函數,它在每個請求被特定的路徑操作處理之前,以及在每個響應返回之前工作.
-
它接收你的應用程序的每一個請求.
-
然后它可以對這個請求做一些事情或者執行任何需要的代碼.
-
然后它將請求傳遞給應用程序的其他部分 (通過某種路徑操作).
-
然后它獲取應用程序生產的響應 (通過某種路徑操作).
-
它可以對該響應做些什么或者執行任何需要的代碼.
-
然后它返回這個 響應.
那么看下如何創建中間件?
要創建中間件你可以在函數的頂部使用裝飾器 @app.middleware("http")
.
中間件參數接收如下參數:
-
request
. -
一個函數
call_next
它將接收request
作為參數. -
這個函數將
request
傳遞給相應的 路徑操作. -
然后它將返回由相應的路徑操作生成的
response
. -
然后你可以在返回
response
前進一步修改它.
我們看下如何去實現中間件。
import time from fastapi import FastAPI, Request app = FastAPI() @app.middleware("http") async def add_process_time_header(request: Request, call_next): start_time = time.time() response = await call_next(request) process_time = time.time() - start_time response.headers["X-Process-Time"] = str(process_time) response.headers['leizishuocceshikaifa']="leizishuoceshikaifa" return response @app.post("/create") def post(): return "post"
我們實現一個中間件,
在 response 的前和后 在任何路徑操作收到request前,可以添加要和請求一起運行的代碼.也可以在響應生成但是返回之前添加代碼。
我們去看下接口輸出的結果
我們看下接口返回的Headers
我們可以看到,我標記紅色的地方,就是我們在請求的中間件中,處理的,默認就給我們返回我們處理后的。