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

相关推荐

  • 国产化信创服务器厂家有哪些,信创服务器品牌排名怎么看?

    国产化信创服务器市场主要由鲲鹏、飞腾、海光、兆芯、龙芯等芯片架构主导,基于这些芯片的整机厂商已覆盖政务、金融、能源等关键行业,形成从指令集到应用层的完整替代方案,信创服务器核心阵营:五大主流芯片架构国产信创服务器的根基在于自主可控的处理器,当前市场主流架构分为五条路线,每条路线背后都有明确的生态支撑和行业应用场……

    2026年7月29日
    2500
  • 服务器应用进程怎么关闭,windows强制结束进程命令

    关闭服务器应用进程的核心在于“精准识别”与“安全终止”,必须遵循“先查后杀”的原则,优先使用优雅终止方式保护数据完整性,仅在无响应时强制结束,并建立监控机制防止进程僵尸化或自动重启,在运维管理中,服务器应用进程怎么关闭是一个看似简单实则风险极高的操作,错误的操作可能导致数据丢失、服务不可用甚至系统崩溃,专业的运……

    2026年4月4日
    10100
  • 服务器如何构建网站,新手小白搭建详细步骤是什么?

    构建一个高性能、安全且利于百度收录的网站,核心在于服务器的科学选型、严谨的环境搭建、持续的安全加固以及精细的性能优化,服务器不仅仅是存放代码的容器,更是网站用户体验的基石和SEO排名的底层支撑,一个配置合理、优化得当的服务器环境,能够显著提升页面加载速度,降低抓取延迟,从而在百度搜索引擎中获得更高的权重和排名……

    2026年2月16日
    22200
  • Nameko Python框架怎么用?Python微服务框架选型

    Nameko 是一个基于 Python 的轻量级微服务框架,适合需要快速构建、低延迟且易于维护的服务端应用,尤其在中小型团队或微服务初期阶段具有极高的性价比,在微服务架构日益普及的今天,选择正确的技术栈是项目成功的基石,对于 Python 开发者而言,Nameko 提供了独特的 RPC(远程过程调用)机制,它摒……

    2026年7月5日
    16000
  • 个人云存储协同工作资料共享好用吗?企业级云盘数据同步方案

    个人云存储协同工作资料共享的核心在于选择具备实时同步、权限精细管控及多端兼容能力的平台,通过建立标准化的文件夹结构与共享链接机制,实现高效且安全的团队协作,个人云存储选型的核心逻辑与场景匹配在2026年的数字化工作环境中,个人云存储早已超越了简单的“网盘备份”范畴,演变为个人知识管理与轻量级协作的核心枢纽,对于……

    2026年5月27日
    3800
  • 个人信息网站模板怎么制作?个人网站搭建教程

    选择个人信息网站模板时,核心在于平衡响应式设计的兼容性、SEO优化的底层架构以及个人品牌展示的视觉冲击力,建议优先选用基于HTML5和CSS3构建的轻量级主题,而非臃肿的WordPress重型插件组合,在数字化生存成为常态的2026年,个人网站不再仅仅是网络名片,更是职业背书、作品集展示以及私域流量沉淀的关键阵……

    2026年6月14日
    3900
  • 服务器怎么做有限元计算,服务器有限元计算配置要求高吗

    服务器进行有限元计算的核心在于构建高性能计算集群架构,通过并行计算技术将复杂的数值模拟任务分解,利用强大的CPU浮点运算能力、大容量内存带宽以及高速低延迟的网络通信环境,实现对物理工程问题的快速求解,要实现这一过程,必须从硬件配置选型、软件环境部署、并行策略设置以及求解优化四个维度进行系统规划,高性能硬件架构是……

    2026年3月17日
    10100
  • GPU服务器运行模拟器卡顿怎么办?GPU服务器模拟器配置要求

    GPU服务器运行模拟器并非简单的软件安装,而是通过虚拟化技术将物理GPU算力切分并映射给多个虚拟机或容器,其核心在于利用NVIDIA vGPU或MIG技术实现算力隔离与高效调度,从而显著降低AI训练与推理成本,在2026年的算力基础设施语境下,单纯购买物理GPU服务器往往面临资源闲置与成本高昂的双重困境,企业更……

    2026年6月24日
    2500
  • 服务器开发好吗?服务器开发前景怎么样?

    服务器开发是一项极具职业前景且技术壁垒较高的工作,整体评价非常积极,它不仅拥有广阔的就业市场和优厚的薪资待遇,更是构建数字世界底层逻辑的核心岗位,对于追求技术深度与职业稳定性的开发者而言,这是一个优质的选择,核心优势:技术深度与职业护城河服务器开发不同于一般的应用层开发,它要求开发者对计算机系统有更深层次的理解……

    2026年4月1日
    8100
  • web客户端和服务器端分别有哪些技术,前后端技术栈有哪些?

    Web客户端技术负责用户界面和交互,服务器端技术处理业务逻辑和数据存储,两者通过HTTP协议协作,共同构成完整的Web应用,要构建现代化网站,前端与后端技术缺一不可,web客户端技术有哪些?客户端技术直接面向用户,决定了网站的视觉呈现和操作体验,主流技术栈集中在以下层级,基础三件套:HTML、CSS、JavaS……

    2026年7月23日
    700

发表回复

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