【发布时间】:2021-08-05 14:23:10
【问题描述】:
无论如何,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 中传递了一些关键参数。
是否可以将 Path 参数传递给依赖项,或者在路由器中执行依赖项并传递结果?
【问题讨论】:
-
你可以让你的依赖依赖于一个路径参数,有效地做
Depends(item_for_client_from_path)并且让item_for_client_from_path依赖于`item_for_client_from_path(item_id=Path(), session=Depends(security.user_session));即,您创建的依赖项抽象出您每次使用的那些子依赖项。是否符合您的要求? -
@MatsLindh 可能。从您的评论中,我看不出您将如何从
Path()中提取参数。我是 FastAPI 的新手,所以我很可能错过了一些明显的东西。与上面的示例一样,我需要提取可能不在完全统一位置的路径的一部分。对于某些功能,/item/{item_id}/.../foo/bar/item/{item_id}/之前可能还有其他项目。 -
只要参数在两个位置都被命名为
item_id,它就会像你期望的那样工作。有时间我会尝试做一个例子 -
那太好了,谢谢!
标签: fastapi