marshmallow python是什么?marshmallow python教程

Marshmallow 是 Python 中一个非常流行且强大的库,主要用于对象的序列化(Serialization)和反序列化(Deserialization)

它可以将复杂的 Python 对象(如类实例、字典、列表等)转换为 JSON 字符串或字典(序列化),也可以将 JSON 字符串或字典转换回 Python 对象(反序列化)。

Python教程 | 在Mac电脑上用Terminal使用Python (新建/打开/保存/删除Python文件) | 薯条弟弟
加载中
Python教程 | 在Mac电脑上用Terminal使用Python (新建/打开/保存/删除Python文件) | 薯条弟弟

🌟 为什么使用 Marshmallow?

  1. 结构化数据验证:在反序列化时自动验证数据格式、类型、必填字段等。
  2. 嵌套对象支持:轻松处理嵌套的字典或对象。
  3. 与 Web 框架集成良好:常用于 Flask、Django、FastAPI 等框架中处理 API 请求/响应数据。
  4. 灵活可扩展:支持自定义字段、转换器、钩子函数(hooks)等。

📦 安装

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)

from marshmallow import pprint
user = {
    "id": 1,

marshmallow python是什么?marshmallow python教程

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

反序列化(字典/JSON → Python 对象)+ 验证

# 合法数据
data = {
    "name": "Bob",
    "email": "bob@example.com",
    "age": 25
}
try:
    result = schema.load(data)
    print(result)
    # 输出: {'name': 'Bob', 'email': 'bob@example.com', 'age': 25, 'is_active': True}
except Exception as e:
    print(e)
# 非法数据(缺少必填字段)
invalid_data = {
    "name": "Charlie"  # 缺少 email
}
try:
    result = schema.load(invalid_data)
except Exception as e:
    print(e)
    # 输出: {'email': ['Missing data for required field.']}

🔗 嵌套 Schema 示例

class AddressSchema(Schema):
    street = fields.Str(required=True)
    city = fields.Str(required=True)
class UserSchema(Schema):
    id = fields.Int()
    name = fields.Str()
    address = fields.Nested(AddressSchema())
# 嵌套数据
user_data = {
    "id": 1,
    "name": "Alice",
    "address": {
        "street": "123 Main St",
        "city": "New York"
    }
}
schema = UserSchema()
result = schema.load(user_data)
print(result)
# 输出: {'id': 1, 'name': 'Alice', 'address': {'street': '123 Main St', 'city': 'New York'}}

marshmallow python是什么?marshmallow python教程


🧩 常用字段类型

字段 说明
fields.Str() 字符串
fields.Int() 整数
fields.Float() 浮点数
fields.Bool() 布尔值
fields.Email() 邮箱格式验证
fields.URL() URL 格式验证
fields.DateTime() 日期时间(支持格式化)
fields.List() 列表
fields.Dict() 字典
fields.Nested() 嵌套 Schema
fields.Method() 自定义序列化/反序列化方法
fields.Function() 自定义序列化函数

✅ 验证器(Validators)

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))
email = fields.Email()
# 自定义验证器
def validate_not_bob(value):
    if value.lower() == 'bob':
        raise ValidationError("Name cannot be 'Bob'")
name = fields.Str(validate=validate_not_bob)

marshmallow python是什么?marshmallow python教程


🔄 与 Web 框架集成(以 Flask 为例)

from flask import Flask, request, jsonify
from marshmallow import Schema, fields
app = Flask(__name__)
class UserSchema(Schema):
    name = fields.Str(required=True)
    email = fields.Email(required=True)
schema = UserSchema()
@app.route('/users', methods=['POST'])
def create_user():
    try:
        data = schema.load(request.json)
        # 处理数据...
        return jsonify({"message": "User created", "data": schema.dump(data)}), 201
    except Exception as e:
        return jsonify({"errors": e.messages}), 400

📚 官方文档

  • 官网:https://marshmallow.readthedocs.io/
  • GitHub:https://github.com/marshmallow-code/marshmallow

💡 小贴士

  • dump_only:字段仅在序列化时输出,不参与反序列化。
  • load_only:字段仅在反序列化时输入,不参与序列化。
  • required=True:该字段在反序列化时是必填的。
  • default=value:如果字段缺失,使用默认值。

如果你有具体的使用场景(如 FastAPI、Django、数据模型转换等),可以告诉我,我可以提供更针对性的示例!

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/477304.html

(0)
10g.biz香港GIA線路真的穩嗎?雲服務器僅$2.75起
上一篇 2026年7月10日 01:09
Excel怎么列出所有组合?excel表格生成所有组合
下一篇 2026年7月10日 01:09

相关推荐

  • 服务器搭建20ip怎么操作?服务器多IP配置教程

    单台服务器配置20个IP地址,是突破网络瓶颈、实现业务高并发与数据分散管理的核心策略,这一方案不仅能显著提升服务器的网络吞吐能力,更能为站群优化、爬虫数据采集以及高可用负载均衡提供坚实的底层架构支持,通过合理的硬件选型、精细的网卡配置与严谨的IP规划,企业可以用最低的硬件成本构建出高性能的网络服务节点,核心价值……

    2026年3月9日
    10200
  • 服务器维护必做工作清单|如何做好服务器维护?详细工作清单分享,24字,长尾部分完整包含疑问句式如何及高频搜索词详细工作清单,精准匹配用户搜索意图且符合百度SEO长尾词组合规则)

    服务器的正常运行是企业数字化运营的命脉,确保其稳定、安全、高效并非一劳永逸,而是依赖于一套严谨、持续且专业的维护工作体系,核心的服务器维护工作主要涵盖以下几个方面: 硬件层面的物理维护与保障服务器首先是物理实体,其硬件的健康是基础,物理环境监控与优化:温度与湿度控制: 严格监控机房环境,确保温度(通常18-27……

    2026年2月11日
    13130
  • 服务器开启超线程有什么好处?超线程技术有必要开启吗

    服务器开启超线程技术是提升计算资源利用率、解决性能瓶颈的高性价比方案,其核心价值在于通过逻辑核心倍增,在不增加物理硬件投入的前提下,显著提高服务器的并发处理能力和吞吐量,对于面临高并发请求、多任务处理压力的企业级应用环境,合理开启并配置超线程,能够最大化挖掘CPU潜力,实现业务性能的阶梯式跃升,超线程技术的运作……

    2026年3月27日
    8800
  • 高端html5网站设计工作室

    在2026年的搜索生态中,选择高端html5网站设计工作室的核心价值在于通过前沿Web标准与深度商业逻辑的融合,实现品牌数字资产的高转化与强信任沉淀,为何2026年企业必须重构高端HTML5网站搜索算法迭代与用户体验的双重倒逼核心网页指标(Core Web Vitals)权重飙升:百度2026年MIP(移动网页……

    2026年5月1日
    6300
  • 防火墙WAF部署过程中,如何确保网络安全和系统稳定性?

    防火墙WAF部署Web应用防火墙(WAF)是保护网站和应用免受SQL注入、跨站脚本(XSS)、零日漏洞等复杂网络攻击的关键防线,其核心工作原理在于深度解析HTTP/HTTPS流量,基于预定义规则、行为分析或机器学习模型,实时识别并阻断恶意请求,确保合法流量的顺畅通行,相较于传统网络防火墙基于IP和端口的防护,W……

    2026年2月4日
    11000
  • 高精版文字识别秒杀好用吗?高精文字识别软件哪个准

    在数字化深水区的2026年,实现高精版文字识别秒杀的核心在于端云协同的深度学习架构与芯片级算力调度,这不仅是技术指标的突破,更是企业降本增效的绝对利器,技术底座:为何“秒杀”成为2026年行业刚需算力跃迁与算法重构传统OCR受限于串行处理逻辑,面对海量并发常现延迟塌方,依托新一代NPU(神经网络处理器)与多模态……

    2026年4月28日
    5100
  • 为什么服务器看不见云盘?服务器连接云盘解决方法

    服务器无法识别或“看不见”连接的云盘(无论是块存储、网络文件系统还是对象存储挂载点),是运维和开发中常见的棘手问题,核心原因通常在于配置错误、服务异常、权限问题或网络/路径故障,而非云盘本身物理损坏,解决此问题需要系统性的排查和专业的处理流程, 问题核心:看不见的本质是什么?“看不见”通常表现为以下几种形式:操……

    2026年2月7日
    12100
  • 个人云服务器怎么使用方法?个人云服务器租用费用及配置推荐

    个人云服务器并非遥不可及的技术黑盒,其核心使用方法可概括为:通过控制台创建实例、利用SSH连接Linux系统、部署Web服务或应用,并配合安全组策略保障数据安全,对于大多数非专业开发者而言,购买服务器只是第一步,真正的挑战在于如何将其转化为可用的计算资源,2026年的云计算市场已经高度成熟,个人用户不再需要精通……

    2026年6月16日
    4500
  • 服务器智能监控系统哪个好,免费开源的有哪些?

    在数字化转型的浪潮中,IT基础设施的稳定性直接决定了企业的业务连续性与市场竞争力,构建一套高效的服务器智能监控系统已不再是运维部门的可选项,而是保障业务高可用的必经之路,其核心价值在于通过全维度的数据采集与深度分析,实现从“被动救火”向“主动防御”的根本性转变,确保服务器资源在最优状态下运行,最大化投资回报率……

    2026年2月25日
    13300
  • 如何注册服务器服务号?申请流程详解

    服务器服务号是服务器设备的唯一身份标识符,通常由制造商在生产时赋予,并固化在服务器的固件(如BIOS、BMC)或特定硬件组件(如服务标签、资产标签)中,它远不止是一个简单的序列号,而是贯穿服务器全生命周期管理、运维支持和价值挖掘的核心枢纽,是精准高效管理服务器资产的基石, 服务器服务号的本质与核心价值服务器服务……

    2026年2月14日
    11730

发表回复

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