Python 使用Pydantic模型(FastAPI)设置swagger文档中查询参数的说明

Python 使用Pydantic模型(FastAPI)设置swagger文档中查询参数的说明,python,fastapi,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-quer

这是继续下去的

我已经添加了一个模型来获取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
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
它按预期工作,但描述(添加在模型中)未反映在swagger ui中

但若请求主体使用了相同的模型,那个么描述将显示在swagger中


我是否遗漏了在swagger ui中获取查询参数(模型)描述的内容?

这在Pydantic模型中是不可能的

获得所需结果的解决方法是使用自定义依赖类(或函数)而不是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
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
根据fastapi导入、fastapi、查询
app=FastAPI()
类CustomQueryParams:
定义初始化__(
自己
foo:str=Query(…,description=“foo的酷描述”),
bar:str=Query(…,description=“对bar的酷描述”),
):
self.foo=foo
self.bar=bar
@app.get(“/test query/”)
异步def get_by_查询(参数:CustomQueryParams=Depends()):
返回参数
因此,您将把doc作为


工具书类
  • 似乎对扩展Pydantic模型以验证GET参数的兴趣不大

  • 这样就可以了。但是想要pydantic模型你不能用pydantic做这个。不知道为什么要使用查询,它的属性类似于pydantic Field
    Query(…)
    用于生成OpenAPI模式。我不同意Arakkabal的回答,我能够做到这一点,OpenAPI Spec&Swagger允许这一点,并且查询参数有一个描述字段。这意味着你应该这样做,因为FastAPI是基于OpenAPI规范的。今天晚些时候我会再看一遍。谢谢,如果你发现什么,请告诉我