四、 Marshmallow Schemas 介绍 (Flask开发应用)

Marshmallow Schemas 介绍 (Flask开发应用)


Marshmallow 是一个用于序列化和反序列化复杂数据类型(例如对象)到 Python 原生数据类型(如字典、列表)的库,同时它也提供数据验证功能。在许多 Flask 项目中,Marshmallow 常用于处理 JSON 请求和响应数据的验证和格式化。
marshmallow是一个用来将复杂的orm对象与python原生数据类型之间相互转换的库,简而言之,就是实现:
object -> dict,object -> json string,object -> list
json string -> dict,json string -> list,json string -> object
dict -> object,list -> object。
marshmallow在反序列化(dict/str/list->object)的时候,可以进行数据字段的校验。因此数据校验仅仅是marshmallow的附加功能。

Schemas

在 Marshmallow 中,Schema 用于定义数据的结构和验证规则。每个 Schema 包含一系列的字段(Field),这些字段定义了数据应该如何被序列化(转换成 JSON)和反序列化(从 JSON 转换回 Python 数据类型)。

Fields

字段是 Schema 的基本组成部分,代表数据的一个属性。Marshmallow 提供了许多内置的字段类型,例如 StringIntegerDateTime 等,每种字段类型都有自己的验证器和处理逻辑。

基本使用

  1. 定义 Schema:首先,你需要定义一个 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,它有三个字段:usernameemailagerequired=True 表示这些字段是必须的,validate 参数用于指定一个验证函数。

  1. 序列化:使用 dump()dumps() 方法将 Python 对象转换成字典或 JSON 字符串。
user_data = {
    'username': 'johndoe',
    'email': 'john.doe@example.com',
    'age': 25
}

schema = UserSchema()
result = schema.dump(user_data)
print(result)  # 输出序列化后的字典
  1. 反序列化:使用 load()loads() 方法将输入的数据(一般是 JSON 格式)转换成 Python 对象。
input_data = {
    'username': 'janedoe',
    'email': 'jane.doe@example.com',
    'age': 22
}

schema = UserSchema()
result = schema.load(input_data)
print(result)  # 输出反序列化后的字典

如果输入数据不符合定义的 Schema,load() 方法将抛出 ValidationError

  1. 验证Schema 还可以用来验证数据。如果数据无效,可以捕获 ValidationError 并处理错误。
try:
    result = schema.load({'username': 'johndoe', 'email': 'not-an-email', 'age': 25})
except ValidationError as err:
    print(err.messages)  # 输出错误信息

进阶使用

Marshmallow 还允许自定义验证函数、使用函数或方法进行字段的后处理、处理复杂的嵌套结构、支持字段的默认值和缺失值处理等。

通过使用 Marshmallow,你可以构建强大而灵活的数据处理逻辑,同时确保 API 与外部系统交互时的数据的有效性和一致性。

一篇写的比较好的教程

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值