Python marshmallow怎么用?marshmallow序列化字段详解

Marshmallow 是一个流行的 Python 库,主要用于对象的序列化和反序列化,它常用于将 Python 对象(如数据类、字典、ORM 模型等)转换为 JSON 格式(序列化),以及将 JSON 数据转换回 Python 对象(反序列化)。

Marshmallow 特别适用于 Web 开发框架(如 Flask、Django、FastAPI),因为它可以轻松地处理请求数据的验证和响应数据的格式化。

《Marshmallow Rag》棉花糖雷格泰姆 钢琴
加载中
《Marshmallow Rag》棉花糖雷格泰姆 钢琴

核心概念

  1. Schema(模式):定义数据结构、字段类型、验证规则等。
  2. 序列化(Serialization):将 Python 对象 → JSON/字典。
  3. 反序列化(Deserialization):将 JSON/字典 → Python 对象。
  4. 验证(Validation):在反序列化过程中检查数据是否符合预期。

安装

pip install marshmallow

基本示例

定义 Schema

from marshmallow import Schema, fields, validate
class UserSchema(Schema):
    id = fields.Int(dump_only=True)  # 只用于输出
    name = fields.Str(required=True, validate=validate.Length(min=1, max=50))
    email = fields.Email(required=True)
    age = fields.Int(validate=validate.Range(min=0, max=120))
    is_active = fields.Bool(default=True)

序列化(Python 对象 → JSON)

user = {
    "id": 1,
    "name": "Alice",
    "email": "alice@example.com",
    "age": 30,
    "is_active": True
}
schema = UserSchema()
result = schema.dump(user)
print(result)
# 输出: {'id': 1, 'name': 'Alice', 'email': 'alice@example.com', 'age': 30, 'is_active': True}

Python marshmallow怎么用?marshmallow序列化字段详解

反序列化(JSON → Python 对象)

json_data = {
    "name": "Bob",
    "email": "bob@example.com",
    "age": 25
}
try:
    result = schema.load(json_data)
    print(result)
    # 输出: {'name': 'Bob', 'email': 'bob@example.com', 'age': 25, 'is_active': True}
except Exception as e:
    print(e)

验证失败示例

invalid_data = {
    "name": "",  # 长度不足
    "email": "not-an-email",  # 无效邮箱
    "age": 200  # 超出范围
}
try:
    result = schema.load(invalid_data)
except Exception as e:
    print(e.messages)
    # 输出: {'name': ['Shorter than minimum length 1.'], 'email': ['Not a valid email address.', 'Field may not be null.'], 'age': ['Must be greater than or equal to 0 and less than or equal to 120.']}

常用字段类型

字段类型 说明
fields.Str() 字符串
fields.Int() 整数
fields.Float() 浮点数
fields.Bool() 布尔值

Python marshmallow怎么用?marshmallow序列化字段详解

fields.Email()

邮箱地址
fields.URL()URL 地址
fields.DateTime()日期时间
fields.Date()日期
fields.List()列表
fields.Dict()字典
fields.Nested()嵌套 Schema
fields.Method()自定义方法序列化
fields.Function()自定义函数序列化

嵌套 Schema

class AddressSchema(Schema):    street = fields.Str(required=True)    city = fields.Str(required=True)class UserSchema(Schema):    name = fields.Str(required=True)    address = fields.Nested(AddressSchema())# 使用user_data = {    "name": "Charlie",    "address": {        "street": "123 Main St",        "city": "New York"    }}schema = UserSchema()result = schema.load(user_data)print(result)# 输出: {'name': 'Charlie', 'address': {'street': '123 Main St', 'city': 'New York'}}

与 ORM 集成(以 SQLAlchemy 为例)

from marshmallow_sqlalchemy import SQLAlchemyAutoSchemaclass UserSQLAlchemySchema(SQLAlchemyAutoSchema):    class Meta:        model = User  # 你的 SQLAlchemy 模型        load_instance = True  # 反序列化时返回 ORM 实例

Python marshmallow怎么用?marshmallow序列化字段详解


常用验证器

from marshmallow import validate
# 字符串长度
name = fields.Str(validate=validate.Length(min=1, max=50))
# 数值范围
age = fields.Int(validate=validate.Range(min=0, max=120))
# 自定义正则表达式
phone = fields.Str(validate=validate.Regexp(r'^d{11}$'))
# 自定义验证函数
def validate_email(value):
    if not value.endswith('@example.com'):
        raise Exception("Email must be from example.com")
email = fields.Email(validate=validate_email)

最佳实践

  1. 使用 dump_onlyload_only:避免敏感字段(如密码)被序列化或反序列化。
  2. 使用 required=True:确保必填字段存在。
  3. 使用验证器:在 Schema 层进行数据验证,而不是在业务逻辑中。
  4. 使用 Nested 字段:处理复杂数据结构。
  5. 使用 post_load 装饰器:在反序列化后执行自定义逻辑。
class UserSchema(Schema):
    name = fields.Str(required=True)
    email = fields.Email(required=True)
    @post_load
    def make_user(self, data, kwargs):
        return User(data)  # 返回自定义对象

Marshmallow 是一个强大且灵活的库,适合处理数据验证和序列化/反序列化任务,它在 Web 开发中非常有用,尤其是与 Flask、Django 或 FastAPI 等框架结合使用时。

如果你有任何具体问题或需要更详细的示例,请告诉我!

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/477555.html

(0)
Flipclock是什么?2026年最新倒计时器APP推荐
上一篇 2026年7月10日 02:04
硅谷圣何塞SPINSERVERS促销值得买吗?SPINSERVERS最新优惠活动详情
下一篇 2026年7月10日 02:07

相关推荐

  • KTV用服务器开票信息有哪些,怎么开票?

    KTV用服务器开票信息主要包含机房服务商的企业全称、纳税人识别号、开票项目类目(通常为“信息技术服务费”或“IDC服务费”)、金额及税率,若涉及云资源则需明细至CPU核数、内存、带宽及公网IP数量, 简单说,这笔发票本质是“机房租用+网络接入”的组合服务费,开票内容能否合规抵扣,直接关系到KTV门店的财务成本……

    2026年8月21日
    100
  • 服务器怎么扩大带宽?服务器带宽升级操作步骤详解

    服务器扩大带宽的核心在于精准识别性能瓶颈,通过“硬件升级、架构优化、服务商协作”三位一体的策略实施,单纯增加带宽数值往往无法解决根本问题,必须结合业务类型、用户分布及成本预算,选择带宽扩容、线路优化或CDN加速等差异化方案,才能实现性价比最高的访问速度提升, 硬件升级与服务商协作:最直接的扩容路径当服务器现有带……

    2026年3月16日
    12600
  • Python探索难吗?Python零基础入门教程

    Python之所以成为2026年开发者首选语言,核心在于其极简的语法降低了入门门槛,同时凭借庞大的开源生态和强大的AI集成能力,满足了从自动化办公到深度学习的全场景需求,在技术迭代极快的今天,选择一门编程语言往往意味着选择一种工作流,Python并没有试图在所有领域都做到极致,而是通过“胶水语言”的特性,将各种……

    2026年7月5日
    19600
  • 服务器服务端口是什么问题怎么办,端口不通怎么解决

    服务器服务端口是网络通信的逻辑通道,其问题通常由端口冲突、防火墙拦截或服务异常引起,解决需遵循“诊断-定位-修复”的标准化流程,在数字化运维中,端口相当于服务器对外交互的“门”,只有确保门的编号正确且处于开启状态,数据流量才能正常进出,一旦出现连接失败,往往是端口层面的配置或权限出现了偏差,理解服务端口的核心机……

    2026年2月20日
    14600
  • 五区一组服务器都有哪些服务器?,怎么查询?

    五区一组服务器通常指游戏中的第五大区第一组,以魔兽世界为例,该组包含布鲁、维希度斯、沙尔图拉等服务器,但具体列表请以官方最新公告为准,不同游戏区组划分逻辑相似,实际体验取决于服务器硬件与网络质量,什么是五区一组服务器区组划分的基本逻辑大型多人在线游戏为了容纳海量玩家,会将服务器按地域或负载划分为多个大区,每个大……

    2026年8月13日
    300
  • 个人云服务器特惠活动是真的吗,云服务器租用价格多少

    2026年个人云服务器特惠活动已进入常态化低价阶段,核心结论是:对于个人开发者、博客站长及小型应用部署,选择按量付费或包年包月的入门级实例(如2核4G配置),配合新用户首购优惠,是当前性价比最高的技术方案,月成本可控制在30-50元区间,个人云服务器特惠活动的底层逻辑与选型策略在2026年的云计算市场,云厂商之……

    2026年6月16日
    3400
  • VM虚拟机需要启动哪些服务器?,怎么设置启动服务器?

    VM虚拟机稳定运行的关键在于确保宿主机系统中所有VMware核心服务全部处于启动状态,主要包括VMware Authorization Service、VMware Workstation Server、VMware VirtualCenter Server以及VMware VMnet服务,任何一项服务缺失或停……

    2026年8月6日
    1300
  • 如何选择服务器配置?2026年服务器租用最新推荐指南

    服务器核心架构组件服务器作为企业IT基础设施的基石,其物理架构包含关键组件:• CPU(中央处理器):多核处理器(如Intel Xeon Scalable/AMD EPYC)通过超线程技术实现并行任务处理,核心数量与主频(GHz)决定计算密度• 内存(RAM):ECC(Error-Correcting Code……

    2026年2月9日
    12000
  • 全球十大服务器品牌有哪些?,哪个品牌最值得买?

    全球十大服务器并非固定榜单,而是按市场份额、技术影响力和行业渗透率综合排名的头部厂商与云服务商,目前公认的十大名单涵盖戴尔、HPE、浪潮、联想、超微、华为、思科、IBM、甲骨文及AWS, 这份名单既包含传统硬件巨头,也纳入云服务器代表,因为现代企业采购服务器时,已从单一硬件选型转向“硬件+云+服务”的综合决策……

    2026年8月20日
    700
  • 中兴1U服务器有哪些推荐型号,怎么选比较好?

    中兴1U服务器主要涵盖R5300 G4、R5300 G5等型号,在1U空间内平衡了计算密度、扩展能力与可靠性,广泛应用于数据中心和边缘计算场景,中兴1U服务器产品线一览中兴通讯的1U服务器集中在R系列,目前R5300 G4和G5是出货主力,还有针对特定行业的定制型号,如R5300 G4S和R5300 G5N,在……

    服务器运维 2026年8月18日
    500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注