W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
有時,我們并不需要在路徑操作函數(shù)中使用依賴項的返回值。
或者說,有些依賴項不返回值。
但仍要執(zhí)行或解析該依賴項。
對于這種情況,不必在聲明路徑操作函數(shù)的參數(shù)時使用 Depends,而是可以在路徑操作裝飾器中添加一個由 dependencies 組成的 list。
路徑操作裝飾器支持可選參數(shù) ~ dependencies。
該參數(shù)的值是由 Depends() 組成的 list:
from fastapi import Depends, FastAPI, Header, HTTPException
app = FastAPI()
async def verify_token(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
async def verify_key(x_key: str = Header(...)):
if x_key != "fake-super-secret-key":
raise HTTPException(status_code=400, detail="X-Key header invalid")
return x_key
@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
路徑操作裝飾器依賴項(以下簡稱為“路徑裝飾器依賴項”)的執(zhí)行或解析方式和普通依賴項一樣,但就算這些依賴項會返回值,它們的值也不會傳遞給路徑操作函數(shù)。
提示
有些編輯器會檢查代碼中沒使用過的函數(shù)參數(shù),并顯示錯誤提示。
在路徑操作裝飾器中使用 dependencies 參數(shù),可以確保在執(zhí)行依賴項的同時,避免編輯器顯示錯誤提示。
使用路徑裝飾器依賴項還可以避免開發(fā)新人誤會代碼中包含無用的未使用參數(shù)。
說明
本例中,使用的是自定義響應頭 X-Key 和 X-Token。
但實際開發(fā)中,尤其是在實現(xiàn)安全措施時,最好使用 FastAPI 內(nèi)置的安全工具(詳見下一章)。
路徑裝飾器依賴項也可以使用普通的依賴項函數(shù)。
路徑裝飾器依賴項可以聲明請求的需求項(比如響應頭)或其他子依賴項:
from fastapi import Depends, FastAPI, Header, HTTPException
app = FastAPI()
async def verify_token(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
async def verify_key(x_key: str = Header(...)):
if x_key != "fake-super-secret-key":
raise HTTPException(status_code=400, detail="X-Key header invalid")
return x_key
@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
路徑裝飾器依賴項與正常的依賴項一樣,可以 raise 異常:
from fastapi import Depends, FastAPI, Header, HTTPException
app = FastAPI()
async def verify_token(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
async def verify_key(x_key: str = Header(...)):
if x_key != "fake-super-secret-key":
raise HTTPException(status_code=400, detail="X-Key header invalid")
return x_key
@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
無論路徑裝飾器依賴項是否返回值,路徑操作都不會使用這些值。
因此,可以復用在其他位置使用過的、(能返回值的)普通依賴項,即使沒有使用這個值,也會執(zhí)行該依賴項:
from fastapi import Depends, FastAPI, Header, HTTPException
app = FastAPI()
async def verify_token(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
async def verify_key(x_key: str = Header(...)):
if x_key != "fake-super-secret-key":
raise HTTPException(status_code=400, detail="X-Key header invalid")
return x_key
@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
稍后,大型應用 - 多文件一章中會介紹如何使用多個文件創(chuàng)建大型應用程序,在這一章中,您將了解到如何為一組路徑操作聲明單個 dependencies 參數(shù)。
接下來,我們將學習如何為 FastAPI 應用程序添加全局依賴項,創(chuàng)建應用于每個路徑操作的依賴項。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: