新聞中心
有時(shí),我們并不需要在路徑操作函數(shù)中使用依賴項(xiàng)的返回值。

或者說(shuō),有些依賴項(xiàng)不返回值。
但仍要執(zhí)行或解析該依賴項(xiàng)。
對(duì)于這種情況,不必在聲明路徑操作函數(shù)的參數(shù)時(shí)使用 Depends,而是可以在路徑操作裝飾器中添加一個(gè)由 dependencies 組成的 list。
在路徑操作裝飾器中添加 dependencies 參數(shù)
路徑操作裝飾器支持可選參數(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"}]
路徑操作裝飾器依賴項(xiàng)(以下簡(jiǎn)稱為“路徑裝飾器依賴項(xiàng)”)的執(zhí)行或解析方式和普通依賴項(xiàng)一樣,但就算這些依賴項(xiàng)會(huì)返回值,它們的值也不會(huì)傳遞給路徑操作函數(shù)。
提示
有些編輯器會(huì)檢查代碼中沒(méi)使用過(guò)的函數(shù)參數(shù),并顯示錯(cuò)誤提示。
在路徑操作裝飾器中使用 dependencies 參數(shù),可以確保在執(zhí)行依賴項(xiàng)的同時(shí),避免編輯器顯示錯(cuò)誤提示。
使用路徑裝飾器依賴項(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)下一章)。
依賴項(xiàng)錯(cuò)誤和返回值
路徑裝飾器依賴項(xiàng)也可以使用普通的依賴項(xiàng)函數(shù)。
依賴項(xiàng)的需求項(xiàng)
路徑裝飾器依賴項(xiàng)可以聲明請(qǐng)求的需求項(xiàng)(比如響應(yīng)頭)或其他子依賴項(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"}]
觸發(fā)異常
路徑裝飾器依賴項(xiàng)與正常的依賴項(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ú)論路徑裝飾器依賴項(xiàng)是否返回值,路徑操作都不會(huì)使用這些值。
因此,可以復(fù)用在其他位置使用過(guò)的、(能返回值的)普通依賴項(xiàng),即使沒(méi)有使用這個(gè)值,也會(huì)執(zhí)行該依賴項(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"}]
為一組路徑操作定義依賴項(xiàng)
稍后,大型應(yīng)用 - 多文件一章中會(huì)介紹如何使用多個(gè)文件創(chuàng)建大型應(yīng)用程序,在這一章中,您將了解到如何為一組路徑操作聲明單個(gè) dependencies 參數(shù)。
全局依賴項(xiàng)
接下來(lái),我們將學(xué)習(xí)如何為 FastAPI 應(yīng)用程序添加全局依賴項(xiàng),創(chuàng)建應(yīng)用于每個(gè)路徑操作的依賴項(xiàng)。
當(dāng)前名稱:創(chuàng)新互聯(lián)FastAPI教程:FastAPI教程路徑操作裝飾器依賴項(xiàng)
文章路徑:http://m.5511xx.com/article/dpehpig.html


咨詢
建站咨詢
