W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
有時(shí),我們并不需要在路徑操作函數(shù)中使用依賴(lài)項(xiàng)的返回值。
或者說(shuō),有些依賴(lài)項(xiàng)不返回值。
但仍要執(zhí)行或解析該依賴(lài)項(xiàng)。
對(duì)于這種情況,不必在聲明路徑操作函數(shù)的參數(shù)時(shí)使用 Depends,而是可以在路徑操作裝飾器中添加一個(gè)由 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"}]
路徑操作裝飾器依賴(lài)項(xiàng)(以下簡(jiǎn)稱(chēng)為“路徑裝飾器依賴(lài)項(xiàng)”)的執(zhí)行或解析方式和普通依賴(lài)項(xiàng)一樣,但就算這些依賴(lài)項(xiàng)會(huì)返回值,它們的值也不會(huì)傳遞給路徑操作函數(shù)。
提示
有些編輯器會(huì)檢查代碼中沒(méi)使用過(guò)的函數(shù)參數(shù),并顯示錯(cuò)誤提示。
在路徑操作裝飾器中使用 dependencies 參數(shù),可以確保在執(zhí)行依賴(lài)項(xiàng)的同時(shí),避免編輯器顯示錯(cuò)誤提示。
使用路徑裝飾器依賴(lài)項(xiàng)還可以避免開(kāi)發(fā)新人誤會(huì)代碼中包含無(wú)用的未使用參數(shù)。
說(shuō)明
本例中,使用的是自定義響應(yīng)頭 X-Key 和 X-Token。
但實(shí)際開(kāi)發(fā)中,尤其是在實(shí)現(xiàn)安全措施時(shí),最好使用 FastAPI 內(nèi)置的安全工具(詳見(jiàn)下一章)。
路徑裝飾器依賴(lài)項(xiàng)也可以使用普通的依賴(lài)項(xiàng)函數(shù)。
路徑裝飾器依賴(lài)項(xiàng)可以聲明請(qǐng)求的需求項(xiàng)(比如響應(yīng)頭)或其他子依賴(lài)項(xiàng):
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"}]
路徑裝飾器依賴(lài)項(xiàng)與正常的依賴(lài)項(xiàng)一樣,可以 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"}]
無(wú)論路徑裝飾器依賴(lài)項(xiàng)是否返回值,路徑操作都不會(huì)使用這些值。
因此,可以復(fù)用在其他位置使用過(guò)的、(能返回值的)普通依賴(lài)項(xiàng),即使沒(méi)有使用這個(gè)值,也會(huì)執(zhí)行該依賴(lài)項(xiàng):
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"}]
稍后,大型應(yīng)用 - 多文件一章中會(huì)介紹如何使用多個(gè)文件創(chuàng)建大型應(yīng)用程序,在這一章中,您將了解到如何為一組路徑操作聲明單個(gè) dependencies 參數(shù)。
接下來(lái),我們將學(xué)習(xí)如何為 FastAPI 應(yīng)用程序添加全局依賴(lài)項(xiàng),創(chuàng)建應(yīng)用于每個(gè)路徑操作的依賴(lài)項(xiàng)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: