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