首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Marshmallow,你的序列化小帮手

Marshmallow,你的序列化小帮手

听说过 Marshmallow 吗?它是个超级实用的 Python 数据处理库,专门处理数据序列化和反序列化。说白了就是把 Python 对象转成 JSON、把 JSON 转回 Python 对象。对接口开发和数据处理来说,简直是神器啊!

1.

基本用法先来一套

要用 Marshmallow,得先装一下:

pip install marshmallow

来看个最简单的例子:

from marshmallow import Schema, fields

class UserSchema(Schema):

name = fields.Str()

age = fields.Int()

email = fields.Email()

# 假装这是从数据库拿到的数据

user_data = {

“name”: “小明”,

“age”: 18,

}

schema = UserSchema()

result = schema.dump(user_data)

print(result)  # 输出序列化后的数据

温馨提示:fields.Email() 会自动帮你验证邮箱格式,写错了直接报错,贼方便!

2.

数据验证有点东西

说实话,数据验证是最烦人的,写一堆 if else 看着就头大。用 Marshmallow 能省不少事:

from marshmallow import Schema, fields, validate

class ProductSchema(Schema):

name = fields.Str(required=True, validate=validate.Length(min=2))

price = fields.Float(validate=validate.Range(min=0))

category = fields.Str(validate=validate.OneOf(['电子', '服装', '食品']))

# 试试看验证

bad_product = {

“name”: “a”,  # 太短了

“price”: -10,  # 价格不能为负

“category”: “玩具”  # 类别不对

}

schema = ProductSchema()

errors = schema.validate(bad_product)

print(errors)  # 看看哪些地方出错了

3.

嵌套结构也不怕

真实项目里数据结构都挺复杂的,好在 Marshmallow 对付起来也不含糊:

class AddressSchema(Schema):

street = fields.Str()

city = fields.Str()

class UserSchema(Schema):

name = fields.Str()

addresses = fields.List(fields.Nested(AddressSchema))

user = {

“name”: “老王”,

“addresses”: [

{“street”: “幸福路”, “city”: “北京”},

{“street”: “快乐街”, “city”: “上海”}

]

}

schema = UserSchema()

print(schema.dump(user))

4.

自定义字段处理

有时候想对数据做点特殊处理,比如把时间戳转成日期格式:

from marshmallow import Schema, fields, post_load

from datetime import datetime

class EventSchema(Schema):

@post_load

def make_datetime(self, data, **kwargs):

return data

event = {

“title”: “下班”,

}

schema = EventSchema()

print(schema.load(event))

温馨提示:post_load 装饰器超好用,可以在数据加载后自动处理。还有 pre_load、post_dump 这些,都能玩出花来。

要是想要把数据部分加载,只要在 Schema 里加个onlyexclude参数就完事了。经常有人问我怎么只序列化某几个字段,这就是答案!

写接口的时候,经常要处理各种数据格式转换,验证数据合法性。要是每次都手写,代码又臭又长。用 Marshmallow 能让代码整洁不少,而且 bug 也少了。

记得多看官方文档,里面还有好多骚操作等着你去发现呢!看完文档,你就是序列化专家了~

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OR6kjGq-DnAbei8-S1Ihiq9g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券