首页 > 解决方案 > 如何在 FastApi-SwaggerUI 中键入名称中带有连字符的变量?

问题描述

如果我向此 API 发送请求:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Response(BaseModel):
    var_name: str

@app.put("/", response_model=Response)
def simple_server(a: str):
    response = Response(var_name=a)
    return response

我得到了这个 json 文件的响应{"var_name1": "a"}。此外,我得到了一个非常漂亮的 Swagger UI,它说明了响应的领域。

我的问题是,我怎样才能{"var-name1": "a"}在 Swagger 文档中以同样漂亮的类型获得这个 json 文件(这是用连字符而不是下划线)?

显然,我无法在 Response 数据类中命名该var_name属性。var-name

标签: pythonswaggerfastapipydanticuvicorn

解决方案


稍微修改你的 pydantic 对象:

from pydantic import BaseModel, Field

class Response(BaseModel):
    var_name: str = Field(alias="var-name")

    class Config:
        allow_population_by_field_name = True

需要该allow_population_by_field_name选项以允许使用字段名称创建对象,如果没有它,您只能使用别名来实例化它。


推荐阅读