0

0

基于 Python 的数据模型驱动开发:Pydantic 的进阶用法

舞夢輝影

舞夢輝影

发布时间:2026-02-22 20:44:02

|

234人浏览过

|

来源于php中文网

原创

pydantic进阶能力包括:一、自定义字段验证器与多阶段校验;二、模型配置类深度定制;三、typeadapter实现运行时泛型解析;四、模型继承与字段覆盖;五、序列化钩子与自定义json编码器。

基于 python 的数据模型驱动开发:pydantic 的进阶用法

如果您正在使用 Pydantic 构建数据模型,但需要超越基础的字段验证与序列化功能,则可能是由于复杂业务场景下对模型行为、运行时动态性或类型安全边界提出了更高要求。以下是实现 Pydantic 进阶能力的关键路径:

一、自定义字段验证器与多阶段校验

Pydantic 支持在字段级别和模型级别嵌入可复用的验证逻辑,允许对输入值进行语义级约束(如业务规则检查),并支持前置/后置验证链式调用,确保数据在进入模型实例前已通过多层过滤。

1、在模型类中使用 @field_validator 装饰器标注方法,指定目标字段名及 mode="before"mode="after"

2、在验证方法内执行条件判断,例如检查邮箱域名是否属于白名单,若不满足则抛出 ValueError

立即学习Python免费学习笔记(深入)”;

3、对同一字段可声明多个验证器,Pydantic 按装饰器出现顺序依次执行,任一验证失败即中断流程并返回错误。

二、模型配置类(Config)的深度定制

通过定义 model_config 类属性,可覆盖默认序列化/反序列化行为,控制字段别名映射、空值处理策略、JSON 编码精度等底层行为,适用于对接外部 API 或遗留系统时的数据格式适配。

1、在模型类内部声明 model_config = ConfigDict(alias_generator=lambda x: x.upper()),使所有字段自动转为大写别名。

2、设置 extra = "forbid" 阻止未知字段传入,或设为 "ignore" 忽略多余键,避免因上游字段变更导致解析异常。

3、启用 validate_default = True,强制对具有默认值的字段也执行验证逻辑,防止默认值本身违反业务约束。

三、使用 TypeAdapter 实现运行时泛型解析

当模型结构无法在编码期静态确定(如根据配置动态生成字段)、或需对非 Pydantic 模型类型(如 List[Dict[str, Any]])执行即时校验时,TypeAdapter 提供无需定义类即可完成类型绑定与转换的能力。

餐饮E站通-在线订餐系统 免费版
餐饮E站通-在线订餐系统 免费版

在线订餐系统源码,提供给设计人员参考一个小型的在线订餐管理系统源码,采用三层模式开发,代码注释详细前台可以进行用户注册、菜单管理及订餐后台管理员可以进行菜单管理、新闻管理、菜肴管理、用户管理操作数据库采用的是Sql2005(由于数据库在App_Data下,如果装了Sql2005数据库会自动配置)

下载

1、导入 from pydantic import TypeAdapter 并传入目标类型注解,例如 TypeAdapter(list[int])

2、调用其 validate_python() 方法传入原始数据,获得强类型结果;或使用 dump_python() 执行反向序列化。

3、对嵌套泛型如 Dict[str, Union[int, str]],直接传入类型表达式即可生效,无需构造中间模型类。

四、模型继承与字段覆盖机制

Pydantic 支持基于类继承的模型扩展,子类可复用父类字段定义,并通过显式重声明实现字段属性覆盖(如修改默认值、添加验证器或调整别名),适用于构建分层数据契约(如基础用户模型 + VIP 用户扩展模型)。

1、定义父类模型并标注 @dataclass 或继承 BaseModel

2、子类继承该模型,在字段声明处重复使用相同字段名,并附加新参数,例如 age: int = Field(default=0, ge=18) 覆盖父类默认值及约束。

3、在子类中使用 @field_validator("age", allow_reuse=True) 添加专属验证逻辑,该验证器仅作用于子类实例。

五、序列化钩子与自定义 JSON 编码器

Pydantic 默认 JSON 序列化不支持自定义对象(如 Decimal、UUID、日期范围),通过注册序列化钩子或全局 JSON 编码器,可精确控制字段输出格式,满足前端消费、日志记录或跨服务传输的格式一致性要求。

1、为特定字段添加 json_schema_extra 参数,在其中定义 serialize 回调函数,返回期望的 JSON 兼容值。

2、使用 model_dump(mode="json") 触发序列化钩子,此时字段值将经由回调函数转换后再参与 JSON 构建。

3、对全局类型(如 datetime),通过 EncoderProtocol 实现统一编码器,并注册至 json.dumps()default 参数。

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

443

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

322

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

443

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

322

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号