有没有办法将pydantic模型转换为fastapi中的查询参数?
我的一些端点通过主体传递参数,但其他一些端点直接在查询中传递它们。所有这些端点共享相同的数据模型,例如:
class Model(BaseModel):
x: str
y: str
Run Code Online (Sandbox Code Playgroud)
我想避免在我的“查询参数端点”的定义中重复我对此模型的定义,例如test_query
在此代码中:
class Model(BaseModel):
x: str
y: str
@app.post("/test-body")
def test_body(model: Model): pass
@app.post("/test-query-params")
def test_query(x: str, y: str): pass
Run Code Online (Sandbox Code Playgroud)
这样做最干净的方法是什么?
Ant*_*ony 14
查询参数列表文档中未提及的特殊情况,例如:
/members?member_ids=1&member_ids=2
Run Code Online (Sandbox Code Playgroud)
不幸的是,@cglacet 提供的答案将忽略此类模型的数组:
class Model(BaseModel):
member_ids: List[str]
Run Code Online (Sandbox Code Playgroud)
您需要像这样修改您的模型:
class Model(BaseModel):
member_ids: List[str] = Field(Query([]))
Run Code Online (Sandbox Code Playgroud)
文档提供了避免这种重复的捷径。在这种情况下,它将给出:
from fastapi import Depends
@app.post("/test-query-params")
def test_query(model: Model = Depends()): pass
Run Code Online (Sandbox Code Playgroud)
这将允许您请求/test-query-params?x=1&y=2
并为此端点生成正确的 OpenAPI 描述。
类似的解决方案可用于使用 Pydantic 模型作为表单数据描述符。
归档时间: |
|
查看次数: |
2604 次 |
最近记录: |