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

相关推荐

  • 你知道服务器池是什么意思吗,它的主要作用有哪些?

    服务器池的核心思想是将多台物理或虚拟服务器的计算、存储、网络资源整合成一个逻辑资源池,按需动态分配,从而提升资源利用率和系统可靠性,服务器池是什么意思?核心概念一句话讲清服务器池(Server Pool)可以理解为“服务器资源池”,它不特指某一种技术,而是一种资源管理架构,在这个架构中,你不再关注单台服务器的性……

    2026年7月25日
    300
  • MC除了2b2t还有哪些服务器值得玩?,哪个服务器推荐?

    如果你在寻找2b2t之外的Minecraft服务器,无政府爱好者可以重点关注9b9t、4b4t和Constantiam,而追求稳定玩法的玩家则可以选择Hypixel、花雨庭等大型服务器,无政府服务器推荐:除了2b2t还有哪些选择2b2t之所以出名,在于它的混乱和自由,但排队时间长、延迟高,让不少玩家望而却步,幸……

    2026年7月25日
    500
  • 个人注册域名能备案吗,个人域名备案需要哪些材料

    个人注册域名是可以进行备案的,但必须通过中国大陆境内的服务器接入商(如阿里云、腾讯云等)提交申请,且审核标准比企业备案更为严格,主要限制在于网站内容不得涉及经营性业务,很多刚接触建站的朋友在拿到心仪的域名后,第一反应往往是兴奋,紧接着就是困惑:我作为一个普通人,手里这个域名真的能合法上线吗?答案其实是肯定的,只……

    服务器运维 2026年5月28日
    3900
  • 服务器怎么写静态路由?详细配置步骤与命令大全

    服务器配置静态路由的核心在于明确网络目标地址、子网掩码与下一跳地址或出接口的对应关系,通过系统命令行或配置文件实现永久生效,从而解决多网卡环境下的跨网段通信问题,这是保障服务器网络高可用性与流量精准控制的关键技术手段,相较于动态路由协议,静态路由具有资源占用低、安全性高、路径可控性强的显著优势, 静态路由的核心……

    2026年3月18日
    12600
  • put python是什么?Python中put方法怎么用

    “put python”并非标准命令,正确用法应为“pip install python”或“conda install python”,用于在本地环境或服务器中安装Python解释器及第三方库,很多新手在搜索“put python”时,往往是因为记错了命令或者混淆了不同包管理器的语法,这种输入错误在初学者中非……

    2026年7月7日
    6900
  • 服务器年费会计分录怎么写?服务器年费入账科目详解

    企业支付的服务器年费,在会计核算上应根据费用性质及企业规模,通常确认为“管理费用”或“无形资产”,并遵循权责发生制原则,通过“预付账款”科目进行分摊处理,这一处理方式的核心在于准确界定费用的受益期限与资产属性,确保财务报表真实反映企业的经营状况, 对于大多数企业而言,服务器年费属于为维持日常运营而发生的刚性支出……

    2026年3月30日
    11000
  • 高级威胁检测系统推荐?企业防APT攻击买哪款好

    面对日益隐蔽的APT攻击与0day漏洞,2026年高级威胁检测系统推荐的核心准则是:优选具备AI驱动引擎、全流量深度解析能力且符合国家等保2.0合规标准的新一代NDR/XDR架构平台,2026高级威胁检测的核心挑战与选型逻辑威胁演进:从“已知特征”到“未知潜伏”传统基于特征库的匹配方案已彻底失效,根据【国家计算……

    2026年4月26日
    4200
  • 高端负载均衡怎么选?企业级高并发架构如何搭建

    2026年企业级高可用架构的绝对基石,是具备亿级并发调度、毫秒级故障切换与AI自适应安全协同的高端负载均衡,2026高端负载均衡的核心价值与演进逻辑为什么传统负载均衡已无法满足当下需求?随着云原生与AI大模型的深度落地,网络流量模型发生根本性畸变,传统基于四层哈希或七层轮询的设备,在面对突发性海量的长连接与加密……

    2026年4月29日
    5300
  • 服务器密码多少时间修改一次,服务器密码多久更换一次安全

    服务器密码多少时间应遵循“90天强制更换+动态策略调整”原则,这是当前行业最安全、最实用的实践标准,根据NIST SP 800-63B、ISO/IEC 27001及国内《信息安全技术 网络安全等级保护基本要求》(GB/T 22239-2019),单纯依赖固定周期更换密码已不再被推荐为首要措施;但结合风险场景与管……

    2026年4月13日
    9200
  • 福州公司网站建设哪家口碑好,福州企业建站费用大概多少钱?

    打造数字化品牌的核心竞争力在数字化转型的浪潮下,无论是在福州本地深耕多年的传统企业,还是初创型的科技公司,拥有一个专业、高效且具备品牌感的官方网站,已不再是“可选项”,而是企业在互联网时代生存与发展的“必选项”,为什么企业需要专业的网站建设?一个优秀的网站不仅是企业的“线上门面”,更是实现业务增长的重要工具,建……

    2026年7月12日
    18100

发表回复

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