PYDANIC模型在FastAPI中的良好实践 [英] Pydantic models good practice in FastAPI
本文介绍了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屋!
查看全文