欢迎访问宙启技术站
智能推送

PythonMarshmallow教程:了解核心概念和用法

发布时间:2023-12-11 07:19:31

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还提供了更多高级功能,如字段序列化、多字段验证、嵌套字段等,可以根据具体需求进行深入学习。