以前我用过marshmallow带 Flask 的库。前段时间我用 Pydantic 尝试过 FastAPI .第一眼 pydantic
似乎类似于 masrhmallow
但仔细观察,它们有所不同。对我来说,它们之间的主要区别是 post_load来自 marshmallow
的方法.我在 pydantic
中找不到任何类似物.post_load
是后处理方法的装饰器。使用它我可以自己处理返回对象,可以为所欲为:
class ProductSchema(Schema):
alias = fields.Str()
category = fields.Str()
brand = fields.Str()
@post_load
def check_alias(self, params, **kwargs):
"""One of the fields must be filled"""
if not any([params.get('alias'), params.get('category'), params.get('brand')]):
raise ValidationError('No alias provided', field='alias')
return params
此外它不仅用于验证。代码示例仅供视觉理解,请勿分析,我刚发明。所以我的问题是:
post_load
有类似的吗?在 pydantic
?
最佳答案
是的,您可以使用 Pydantic 的 @validator
decorator进行预加载、后加载、模型验证等。
这是一个后加载示例
from pydantic import validator
class Person(BaseModel):
first_name: str
second_name: str
@validator("first_name")
def make_it_formal(cls, first_name):
return f"Mr. {first_name.capitalize()}"
p = Person(first_name="egvo", second_name="Example")
p.first_name
Out: Mr. Egvo
关于python - pydantic 中有 post_load 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63597239/