在 Marshmallow 中,Schema
用于定义数据的结构和验证规则。每个 Schema
包含一系列的字段(Field),这些字段定义了数据应该如何被序列化(转换成 JSON)和反序列化(从 JSON 转换回 Python 数据类型)。
字段是 Schema
的基本组成部分,代表数据的一个属性。Marshmallow 提供了许多内置的字段类型,例如 String
、Integer
、DateTime
等,每种字段类型都有自己的验证器和处理逻辑。
Schema
类,指定想要序列化/反序列化的数据结构。from marshmallow import Schema, fields
class UserSchema(Schema):
username = fields.Str(required=True)
email = fields.Email(required=True)
age = fields.Integer(required=True, validate=lambda val: val > 0)
在这个例子中,我们定义了一个 UserSchema
,它有三个字段:username
、email
和 age
。required=True
表示这些字段是必须的,validate
参数用于指定一个验证函数。
dump()
或 dumps()
方法将 Python 对象转换成字典或 JSON 字符串。user_data = {
'username': 'johndoe',
'email': '[email protected]',
'age': 25
}
schema = UserSchema()
result = schema.dump(user_data)
print(result) # 输出序列化后的字典
load()
或 loads()
方法将输入的数据(一般是 JSON 格式)转换成 Python 对象。input_data = {
'username': 'janedoe',
'email': '[email protected]',
'age': 22
}
schema = UserSchema()
result = schema.load(input_data)
print(result) # 输出反序列化后的字典
如果输入数据不符合定义的 Schema,load()
方法将抛出 ValidationError
。
Schema
还可以用来验证数据。如果数据无效,可以捕获 ValidationError
并处理错误。try:
result = schema.load({'username': 'johndoe', 'email': 'not-an-email', 'age': 25})
except ValidationError as err:
print(err.messages) # 输出错误信息
Marshmallow 还允许自定义验证函数、使用函数或方法进行字段的后处理、处理复杂的嵌套结构、支持字段的默认值和缺失值处理等。
通过使用 Marshmallow,你可以构建强大而灵活的数据处理逻辑,同时确保 API 与外部系统交互时的数据的有效性和一致性。
一篇写的比较好的教程