作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
我們可以在FastAPI應用中使用中間件。
中間件實際上是一個函數,在每個request處理之前被調用,同時又在每個response返回之前被調用。
1、首先接收訪問過來的request。
2、然后針對request或其他功能執行自定義邏輯。
3、傳遞request給應用程序繼續處理。
4、接收應用所產生的response。
5、然后針對response或其他功能執行自定義邏輯。
6、返回response。
后台任務(如果有)會在所有中間件執行完以后才會執行。
我們通過在函數頂部添加裝飾器 @app.middleware("http")
的方式來新建一個中間件。
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) return response
中間件函數接收兩個參數:
1、 request
2、函數 call_next:傳遞
我們可以在response返回之前對其進行更改。request
給相應的路徑操作,然后從路徑操作中返回response。
我們可以在調用函數 call_next之前,即任何路徑操作接收到request之前,添加一些自定義邏輯。
也可以在response產生后但返回之前,添加一些自定義邏輯,如上所示的添加自定義頭信息。