W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
你可以向 FastAPI 應(yīng)用添加中間件.
"中間件"是一個函數(shù),它在每個請求被特定的路徑操作處理之前,以及在每個響應(yīng)返回之前工作.
技術(shù)細節(jié)
如果你使用了 yield 關(guān)鍵字依賴, 依賴中的退出代碼將在執(zhí)行中間件后執(zhí)行.
如果有任何后臺任務(wù)(稍后記錄), 它們將在執(zhí)行中間件后運行.
要創(chuàng)建中間件你可以在函數(shù)的頂部使用裝飾器 @app.middleware("http").
中間件參數(shù)接收如下參數(shù):
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
Tip
請記住可以 用'X-' 前綴添加專有自定義請求頭.
但是如果你想讓瀏覽器中的客戶端看到你的自定義請求頭, 你需要把它們加到 CORS 配置 (CORS (Cross-Origin Resource Sharing)) 的 expose_headers 參數(shù)中,在 Starlette's CORS docs文檔中.
技術(shù)細節(jié)
你也可以使用 from starlette.requests import Request.
FastAPI 為了開發(fā)者方便提供了該對象. 但其實它直接來自于 Starlette.
在任何路徑操作收到request前,可以添加要和請求一起運行的代碼.
也可以在響應(yīng)生成但是返回之前添加代碼.
例如你可以添加自定義請求頭 X-Process-Time 包含以秒為單位的接收請求和生成響應(yīng)的時間:
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
你可以稍后在 Advanced User Guide: Advanced Middleware閱讀更多關(guān)于中間件的教程.
你將在下一節(jié)中學習如何使用中間件處理 CORS .
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: