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://test.idctop.com/article/477304.html

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

相关推荐

  • h200服务器包含哪些组件,主要作用是什么?

    H200服务器内部是一套高度集成的异构计算系统,核心组件包括NVIDIA H200 GPU、HBM3e高带宽内存、支持PCIe 5.0的CPU平台、NVLink全互联架构、高速网络接口以及冗余电源和高效散热系统,专为AI大模型训练与推理场景优化,核心组件深度拆解GPU计算单元:H200的算力之源H200服务器的……

    2026年8月12日
    1800
  • GPU云主机真的免费吗?免费GPU云主机哪里申请

    目前市面上不存在永久免费的GPU云主机,所谓“免费”通常指新用户首月体验、限时试用额度或特定科研教育项目的补贴资源,用户需警惕隐藏计费陷阱并仔细核对配置限制,揭秘“免费”背后的真实逻辑与常见套路在云计算市场高度内卷的2026年,各大云服务商为了争夺开发者生态,确实推出了不少看似“免费”的GPU实例,作为具备一定……

    2026年6月26日
    1900
  • python elm是什么?python elm如何搭建开发环境

    Python与Elm并非非此即彼的对立关系,而是前端交互与后端逻辑的最佳搭档,通过API实现前后端分离架构,能显著提升开发效率与系统可维护性,在2026年的Web开发语境下,许多开发者仍在纠结技术选型,前端追求极致体验与类型安全,后端渴望快速迭代与业务逻辑的稳固,Python以其简洁语法和强大的生态占据后端主导……

    2026年7月5日
    16400
  • cf现在都有哪些国家有服务器

    当前,穿越火线(CF)的服务器已覆盖全球主要游戏市场,包括中国、韩国、日本、美国、加拿大、巴西、俄罗斯、英国、德国、法国、新加坡、澳大利亚等国家和地区,各区域节点由当地运营商或专业IDC服务商支持,分布格局因代理策略和玩家规模持续调整,CF全球服务器节点分布亚洲地区:核心战场与低延迟区域亚洲是CF玩家最密集的大……

    2026年8月24日
    000
  • 服务器控制终端框架怎么选?服务器控制终端框架哪个好用

    服务器控制终端框架的构建核心在于实现高效、安全且可扩展的远程管理能力,其本质是通过标准化的协议与模块化设计,解决异构环境下的运维痛点,一个优秀的框架不仅能降低运维成本,更能通过自动化机制保障业务连续性,是企业数字化基础设施的神经中枢,架构设计原则:模块化与解耦服务器控制终端框架的稳定性取决于底层架构的合理性,传……

    2026年3月12日
    12600
  • 服务器很卡是什么原因?服务器卡顿怎么解决?

    服务器卡顿的本质原因通常归结为资源瓶颈、配置不当或网络攻击,解决之道在于建立系统化的监控体系与分层排查机制,而非盲目升级硬件,针对服务器性能瓶颈,必须通过量化数据定位病灶,结合系统参数调优与架构优化,才能实现从根源上解决卡顿问题,以下关于服务器很卡文档介绍内容的核心要点,将遵循金字塔结构展开,帮助运维人员快速建……

    2026年3月24日
    10400
  • 如何架设外网传奇服务器?详细步骤与避坑指南教程

    核心技术解析与实战指南成功将传奇游戏服务器开放至外网供玩家畅玩,核心在于稳定的网络环境、优化的服务器配置与严密的安全防护体系,这三大要素共同构成了流畅、安全游戏体验的基石,构建稳定外网访问通道端口映射(端口转发): 这是关键第一步,在服务器所在局域网的路由器管理界面中,明确映射传奇服务端所需的核心端口(通常包括……

    2026年2月16日
    17800
  • 服务器怎么删除用户?Windows系统删除用户的方法

    服务器删除用户的核心在于“权限验证、数据备份、精确执行、残留清理”这一闭环流程,其中数据备份是防止误删导致业务瘫痪的最后一道防线,而清理用户残留文件则是保障系统安全与存储空间释放的关键步骤,在执行删除操作前,必须明确服务器操作系统类型,不同系统的指令与机制存在显著差异,盲目操作可能导致系统组件损坏或服务中断……

    2026年3月14日
    12000
  • 服务器屏蔽域名怎么解决?服务器屏蔽特定域名的原因及处理方法

    服务器屏蔽域名是当前网站运维中应对恶意攻击、爬虫滥用和内容盗用的关键技术手段,其核心价值在于主动阻断非法访问、保障服务可用性与数据安全,相比被动防御,该策略以“源头拦截”为原则,显著降低服务器负载,提升合法用户访问体验,以下从技术原理、应用场景、实施步骤与风险规避四方面展开说明,什么是服务器屏蔽域名?服务器屏蔽……

    2026年4月14日
    7500
  • 服务器安装镜像怎么样?服务器安装镜像优缺点及推荐方案

    服务器安装镜像是否值得?答案是:对于大多数企业级部署场景,标准化镜像安装是提升效率、保障稳定、降低运维成本的最优解,它不是“怎么样”的问题,而是“如何用得更好”的问题,为什么推荐服务器安装镜像?部署效率提升80%以上传统逐台手动安装系统+驱动+基础软件,单台耗时2–4小时;使用预配置镜像,单台部署可压缩至10分……

    服务器运维 2026年4月16日
    5800

发表回复

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