如何在快速 api 视图中将文档添加到 post body 模型?

How to add docs to post body model on fast api view?

例如假设我们有两个端点:

class FooRequest(BaseModel):
    data: str


@router.post("/foo/", response_model=FooRequest)
async def foo_view(data: FooRequest) -> FooRequest:
    ...


@router.get("/bar/", response_model=FooRequest)
async def bar_view(data: str = Query(..., description="Data param")) -> FooRequest:
    ...

In swagger UI /bar/ 端点将有适当记录的查询参数,/foo/ 将有一些 post body 的抽象示例,没有任何描述。

那么我如何记录 post body 模型?

您可以使用 Configschema_extra 为 Pydantic 模型声明示例。

class FooRequest(BaseModel):
    data: str

    class Config:
        schema_extra = {
            "FooRequest": {
                "name": "Foo Request",
                "description": "Data param",
            }
        }

还可以使用 Field 为 JSON 架构声明额外信息。

from pydantic import Field

...

class FooRequest(BaseModel):
    data: str = Field(..., example="Data param for Foo Request")
    description: Optional[str] = Field(None, example="Description for Foo")

与您可以将额外信息传递给 Field 的方式相同,您可以对 PathQueryBody 等执行相同的操作

例如,您可以将正文请求的示例传递给 Body:

from fastapi import Body

...

class FooRequest(BaseModel):
    data: str


@router.post("/foo/", response_model=FooRequest)
async def foo_view(data: FooRequest = Body(
            ...,
            example={
                "name": "Foo Request",
                "description": "data param",
            },
        ),
    ) -> FooRequest: