使用 Pydantic 模型 (FastAPI) 在 swagger 文档中设置查询参数的描述

kar*_*sas 4 python fastapi

这是继续这个问题

我添加了一个模型来获取 pydantic 模型的查询参数

class QueryParams(BaseModel):
    x: str = Field(description="query x")
    y: str = Field(description="query y")
    z: str = Field(description="query z")


@app.get("/test-query-url/{test_id}")
async def get_by_query(test_id: int, query_params: QueryParams = Depends()):
    print(test_id)
    print(query_params.dict(by_alias=True))
    return True
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但描述(在模型中添加)没有反映在 swagger ui 中

在此处输入图片说明

但是如果请求正文使用相同的模型,那么描述会以swagger的形式显示

在此处输入图片说明

我是否缺少任何内容来获取 swagger ui 中 QueryParams(model) 的描述?

San*_*rde 13

这对我有用


from fastapi import Depends, FastAPI, Query

@app.post("/route")
def some_api(
        self,
        query_param_1: float = Query(None, description="description goes here", ),
        query_param_2: float = Query(None, description="Param 2 does xyz"),
):
    
return "hello world"


Run Code Online (Sandbox Code Playgroud)


JPG*_*JPG 5

这对于 Pydantic 模型是不可能的

获得所需结果的解决方法是使用自定义依赖类(或函数)而不是 Pydantic 模型

from fastapi import Depends, FastAPI, Query

app = FastAPI()


class CustomQueryParams:
    def __init__(
        self,
        foo: str = Query(..., description="Cool Description for foo"),
        bar: str = Query(..., description="Cool Description for bar"),
    ):
        self.foo = foo
        self.bar = bar


@app.get("/test-query/")
async def get_by_query(params: CustomQueryParams = Depends()):
    return params
Run Code Online (Sandbox Code Playgroud)

因此,您将拥有该文档,

截屏


参考

  1. 在 FastAPI 中验证 GET 参数--(FastAPI GitHub)似乎对扩展 Pydantic 模型来验证 GET 参数的兴趣不大
  2. 作为依赖项的类--(FastAPI Doc)