PythonMarshmallow教程:了解核心概念和用法
Python Marshmallow 是一个用于序列化、反序列化和验证数据的库,可将复杂的Python数据类型(例如对象、集合等)转换为json、csv、xml等常见格式。
Marshmallow的核心概念有三个:Schema、Field和Validator。
Schema定义了数据模型的结构和字段。每个字段都是以类的形式表示,比如String、Integer、Float等,它们确定了数据的类型和验证规则。一个Schema可以包含多个字段,每个字段都有 的名称。以下是一个示例:
from marshmallow import Schema, fields
class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
email = fields.Email()
在上面的例子中,我们定义了一个UserSchema,它有三个字段:name、age和email。name和age字段是必需的,而email字段是可选的,并验证是否为有效的电子邮件地址。
Field用于定义每个字段的类型和验证规则。
- String: 字符串类型
- Integer: 整数类型
- Boolean: 布尔类型
- Float: 浮点数类型
等等...
Validator用于自定义验证规则,可以根据需要定义。
from marshmallow import validates, ValidationError
class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
@validates('age')
def validate_age(self, value):
if value < 0 or value > 120:
raise ValidationError('Age must be between 0 and 120')
以上示例中,我们使用@validates装饰器定义了一个自定义验证规则,确保年龄字段的值在0到120之间。
当我们有一个对象需要序列化为json或其他格式时,可以使用Schema进行序列化。
user = {'name': 'John', 'age': 25, 'email': 'john@example.com'}
user_schema = UserSchema()
result = user_schema.dumps(user)
print(result)
输出结果为:
{"name": "John", "age": 25}
通过dumps方法,我们将user对象序列化为json格式,并输出结果。
反过来,可以使用Schema将json解析为对象。
data = '{"name": "John", "age": 25}'
result = user_schema.loads(data)
print(result)
输出结果为:
{'name': 'John', 'age': 25}
通过loads方法,我们将json解析为UserSchema对象,并输出结果。
在Marshmallow中,还可以使用嵌套的Schema来表示复杂的数据模型。下面是一个示例:
class AddressSchema(Schema):
street = fields.String(required=True)
city = fields.String(required=True)
country = fields.String(required=True)
class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
email = fields.Email()
address = fields.Nested(AddressSchema)
在上面的例子中,UserSchema包含一个嵌套的AddressSchema,表示用户的联系地址。
以上是Marshmallow的核心概念和用法的简单介绍。通过Schema、Field和Validator,我们可以轻松地序列化、反序列化和验证数据。Marshmallow还提供了更多高级功能,如字段序列化、多字段验证、嵌套字段等,可以根据具体需求进行深入学习。
