PYDANIC模型在FastAPI中的良好实践 [英] Pydantic models good practice in FastAPI

查看:0
本文介绍了PYDANIC模型在FastAPI中的良好实践的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用FastAPI构建一个REST API,我真的很喜欢这个工具,特别是它与Pydatics和OpenAPI的集成。

例如,我可以将端点采用的模型编写为

class Model(BaseModel):
    field1: str = Field(default=...)
    field2: int = Field(default=...)
    field3: List[int] = Field(default=...)
    field4: float = Field(default=...)
    class Config:
        schema_extra = {
            "example": {
                'field1': 'example 1',
                'field2': 1,
                'field3': [1, 2],
                'field4': 1.3,
            }
        }

但是,我发现我的代码中有相当多的重复,例如,如果我想要创建从Model继承的另一个类,该类添加了另一个字段field5,我需要重新编写Config类来定义新的示例。

有没有这样做的好方法?例如,有没有什么工具可以让您定义具有所有属性和示例的字段,然后根据它需要包含的内容的定义创建类Model

或任何其他更适合于此的模式也是受欢迎的。

推荐答案

您可以额外创建一个基本架构并在每个实例化中进行修改:

base_schema_extra = {
    "example": {
        'field1': 'example 1',
        'field2': 1,
        'field3': [1, 2],
        'field4': 1.3,
    }
}

class Model(BaseModel):
    field1: str = Field(default=...)
    field2: int = Field(default=...)
    field3: List[int] = Field(default=...)
    field4: float = Field(default=...)

    class Config:
        schema_extra = base_schema_extra


class Model2(BaseModel):
    field1: str = Field(default=...)
    field2: int = Field(default=...)
    field3: List[int] = Field(default=...)
    field4: float = Field(default=...)
    field5: bool = Field(default=...)

    class Config:
        schema_extra = dict(**base_schema_extra, **{'field5': True})

您还可以使用以下方法继承类:

class Model3(Model2):
    field6: bool = Field(default=...)

    class Config(Model.Config):
        schema_extra = dict(**Model.Config.schema_extra, **{'field6': False})

这篇关于PYDANIC模型在FastAPI中的良好实践的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆