从 pydantic 模型查询参数

Query parameters from pydantic model

有没有办法将 pydantic 模型转换为 fastapi 中的查询参数?

我的一些端点通过正文传递参数,但其他一些端点直接在查询中传递它们。所有这些端点共享相同的数据模型,例如:

class Model(BaseModel):
    x: str
    y: str

我想避免在我的 "query-parameters endpoints" 的定义中重复我对这个模型的定义,例如 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

最干净的方法是什么?

文档给出了一个 shortcut 来避免这种重复。在这种情况下,它将给出:

from fastapi import Depends

@app.post("/test-query-params")
def test_query(model: Model = Depends()): pass

这将允许您请求 /test-query-params?x=1&y=2 并且还将为此端点生成正确的 OpenAPI 描述。

可用于将 Pydantic 模型用作表单数据描述符。

如果您的架构是 "最小".

非常合适

但是,当涉及到像这样复杂的问题时,,最好使用“自定义依赖项class”

from fastapi import Depends, FastAPI, Query

app = FastAPI()


<b>class Model:
    def __init__(
            self,
            y: str,
            x: str = Query(
                default='default for X',
                title='Title for X',
                deprecated=True
            )

    ):
        self.x = x
        self.y = y</b>


@app.post("/test-body")
def test_body(<b>model: Model = Depends()</b>):
    return model

如果您使用此方法,您将可以更好地控制 OpenAPI 文档。