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/marshmallow-python%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9fmarshmallow-python%e6%95%99%e7%a8%8b/

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

相关推荐

  • 服务器存储空间不足怎么办?优化盘存与存储片管理技巧

    在数据中心的核心地带,服务器盘存与存储片的管理是支撑业务连续性、数据安全性与系统性能的基石,它远不止于简单的硬盘列表或空间分配,而是涉及物理资源规划、逻辑抽象优化、性能调校和安全保障的系统性工程,精确高效的盘存与存储片管理能显著提升资源利用率、降低TCO(总拥有成本)并确保关键应用的服务等级协议(SLA), 服……

    2026年2月8日
    13100
  • 服务器如何开启tomcat,tomcat启动命令详解

    在Linux或Windows服务器环境中,成功启动Tomcat服务并确保其稳定运行,核心在于建立一套标准化的“环境配置-服务启动-日志验证”操作闭环,服务器开启Tomcat并非简单的执行启动脚本,而是一个涉及JDK环境变量校验、端口占用排查、防火墙策略配置以及守护进程设置的系统性工程, 只有确保每一个环节的配置……

    2026年3月29日
    7500
  • 服务器延迟测试工具哪个好?推荐几款实用的服务器延迟测试工具

    服务器延迟直接决定业务生死,选择并正确使用专业的测试工具,是保障网络性能稳定的首要前提,通过系统化的测试方案,运维人员能够精准定位网络瓶颈,将潜在的业务中断风险降至最低,核心结论在于:高效的网络管理必须建立在对延迟数据的实时监控与深度分析之上,而优质的测试工具是实现这一目标的基础设施, 服务器延迟对业务性能的决……

    2026年3月28日
    11800
  • 网络服务器架构有哪些

    单体架构、分层架构、分布式架构、微服务架构和无服务器架构,它们分别对应不同业务规模和团队能力,实际部署时需结合基础设施资质与服务商能力来落地,基石架构:单体模式与分层设计单体架构的生存边界单体架构将整个应用打包成一个单元,部署在单台或少量服务器上,多数初创项目或内部管理工具都从单体起步,因为开发迭代快,运维成本……

    2026年8月19日
    1000
  • 服务器如何建立多个站点,服务器多站点搭建教程

    在单台服务器上部署多个站点是提升资源利用率、降低运营成本的核心策略,通过虚拟主机技术、端口分配或反向代理配置,能够实现IP地址的高效复用与业务隔离,这种架构不仅解决了IPv4地址稀缺的问题,更为企业数字化转型提供了灵活、可扩展的底层支撑,是现代运维管理中性价比最高的技术方案之一,核心优势:资源最大化与成本控制服……

    2026年4月2日
    8600
  • 个人智慧医疗是什么?个人智慧医疗平台有哪些

    个人智慧医疗的核心在于通过可穿戴设备与AI算法的深度融合,实现从“被动治疗”向“主动健康管理”的转变,其本质是构建一个24小时在线的个性化健康数字孪生体,个人智慧医疗如何重塑日常健康管理过去,我们对待健康的方式往往是“头痛医头,脚痛医脚”,直到身体发出强烈信号才去就医,这种滞后模式正在被颠覆,个人智慧医疗不再仅……

    2026年6月2日
    4400
  • 个人用户如何映射主机到云?映射主机到云服务器详细教程

    个人用户将本地主机映射到云端,核心在于利用内网穿透技术或构建私有云存储,实现从外网安全访问本地文件、媒体库或开发环境,无需公网IP即可享受云端般的便捷与灵活性,曾经,只有拥有固定公网IP的企业才能轻松实现远程访问,随着家庭宽带带宽的提升和云服务的普及,个人用户也能轻松打破网络隔离,这种需求不仅限于极客,更多普通……

    服务器运维 2026年5月27日
    4900
  • 液压服务器概念股有哪些,液压服务器龙头股代码是多少

    液压服务器在行业语境下多指液冷服务器,相关股票主要分布在温控设备、液冷板、冷却液、服务器整机和IDC服务商等环节,代表标的包括英维克、高澜股份、曙光数创、浪潮信息、工业富联、中科曙光等,先厘清概念:液压服务器还是液冷服务器很多投资者搜索“液压服务器”,但在服务器硬件和算力基础设施领域,更常见的术语是“液冷服务器……

    2026年9月23日
    000
  • 刷下行的服务器有哪些

    刷下行带宽的服务器,核心要看端口速率、流量配额和线路质量,目前主流选择是大带宽直连服务器、高防CDN节点和PCDN边缘计算服务器三类;具体选型需结合业务形态和成本模型,持牌IDC服务商在大流量场景下稳定性更有保障,刷下行服务器的核心需求拆解“刷下行”在技术圈通常指持续拉取大流量数据,比如视频分发预缓存、P2P加……

    2026年9月12日
    000
  • 个人注册网络公司流程复杂吗?注册网络公司需要什么材料

    个人注册网络公司完全可行,但需注意主体性质限制与合规风险,建议根据业务规模选择个体户或一人有限责任公司,并重点关注ICP备案及网络安全合规,随着数字经济深入发展,越来越多的技术人才和自由职业者希望以个人名义创立网络科技公司,这不仅是实现自我价值的途径,也是获取稳定现金流的有效方式,网络行业涉及互联网接入、数据处……

    服务器运维 2026年5月28日
    3600

发表回复

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