GZZ*_*GZZ 4 python pydantic fastapi
我正在使用 FastAPI 构建 REST API,我真的很喜欢这个工具,尤其是与 Pydantic 和 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,
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我发现我的代码中有相当多的重复,例如,如果我想创建另一个继承自添加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})
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下方法继承类:
class Model3(Model2):
field6: bool = Field(default=...)
class Config(Model.Config):
schema_extra = dict(**Model.Config.schema_extra, **{'field6': False})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |