是否有可能将Path参数传递到FastAPI依赖函数?



是否存在FastAPI的"依赖"?解释路径参数?

我有很多这样的函数:

@app.post("/item/{item_id}/process", response_class=ProcessResponse)
async def process_item(item_id: UUID, session: UserSession = Depends(security.user_session)) -> ProcessResponse:
item = await get_item(client_id=session.client_id, item_id=item_id)
await item.process()

一次又一次,我需要传入[多个]参数来获取所需的项目,然后再对其进行操作。这是非常重复的,使代码非常冗长。我真正想做的是将item作为参数传递给方法。

理想情况下,我想使get_item依赖或以某种方式嵌入路由器。这将大大减少重复的逻辑和过于冗长的函数参数。问题是一些关键参数是由客户端在路径中传递的。

是否有可能将Path参数传递给依赖项,或者在路由器中执行依赖项并传递结果?

FastAPI依赖函数可以接受任何一个普通端点函数可以接受的参数。

在一个正常的端点中,你可以这样定义一个路径参数:

from fastapi import FastAPI
app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}

现在如果你想在依赖项中使用该参数,你可以简单地这样做:

from fastapi import Depends, FastAPI
app = FastAPI()
async def my_dependency_function(item_id: int):
return {"item_id": item_id}

@app.get("/items/{item_id}")
async def read_item(item_id: int, my_dependency: dict = Depends(my_dependency_function)):
return my_dependency

参数将被简单地传递给依赖函数,如果它们存在的话。您还可以在依赖函数中使用PathQuery之类的东西来定义它们来自何处。

它将分析请求对象以提取这些值。

下面是一个使用FastAPI中的Path函数的例子:
from fastapi import Depends, FastAPI, Path
app = FastAPI()
async def my_dependency_function(item_id: int = Path(...)):
return {"item_id": item_id}

@app.get("/items/{item_id}")
async def read_item(my_dependency: dict = Depends(my_dependency_function)):
return my_dependency

至于你想在路由器中作为一个依赖来实现它,你可以在创建路由器时这样做:

items_router = APIRouter(
prefix="/items",
tags=["items"],
dependencies=[Depends(my_dependency_function)],
)

或者你可以在应用程序上运行include_router时这样做:

app.include_router(
items_router,
prefix="/items",
dependencies=[Depends(my_dependency_function)],
)

有关依赖关系的更多信息和更多类似的示例,请参阅https://fastapi.tiangolo.com/tutorial/dependencies/

最新更新