pydantic 是现代 python web 开发数据验证的实际起点,basemodel 实例化即自动全量校验、类型转换与字段路径级错误提示;fastapi 深度集成其实现请求解析、校验、文档生成;v2 默认 extra="forbid" 与 datetime 仅支持 iso 格式是两大高频踩坑点。

Pydantic 不是“推荐用”,而是现代 Python Web 开发中数据验证的实际起点——如果你没用它,大概率是在重复造轮子、掩盖错误,或把校验逻辑散落在业务代码里。
BaseModel 实例化即校验,不是事后检查
-
BaseModel构造时自动触发全量校验,不依赖手动调用.validate()或.model_validate()(V2 中已弃用前者) - 错误信息带字段路径:比如
email -> value_error.email,而不是模糊的 “invalid input” - 类型转换同步完成:
age="42"会转成int,signup_time="2023-01-01"自动解析为datetime,失败则直接报错 - 常见踩坑:传入
None给非可选字段(如id: int),或漏写= None/Optional[int]导致实例化失败
FastAPI 里不用 Pydantic 就等于裸奔
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 所有路径操作函数参数若声明为
BaseModel子类,FastAPI 自动:- 解析请求体(JSON/form/multipart)
- 校验并转换类型
- 生成 OpenAPI Schema(文档和前端 SDK 同步)
- 如果你手写
request.json()+if isinstance(...),就放弃了这三件事 - 注意 V2 默认行为:
extra = "forbid",多传字段直接 422;需显式设extra = "ignore"或"allow"才能兼容旧接口
EmailStr、IPvAnyAddress 这些不是装饰,是实打实的验证器
-
EmailStr不只是正则匹配,还做 DNS TLD 检查、ASCII-only 验证、@ 符号位置校验 -
IPvAnyAddress区分 IPv4/IPv6 并拒绝非法格式(如192.168.0.256) -
Field(gt=0, le=100)的约束在构造时生效,不是运行时靠 if 判断 - 容易忽略的点:日期时间字段默认不接受字符串格式的 timestamp(如
"1717228260"),必须用datetime.fromtimestamp()预处理,或自定义@field_validator
extra="forbid" 和 datetime 解析兼容性是上线前最常翻车的两个点
-
extra="forbid"是 V2 默认,但很多前端 SDK 会悄悄加调试字段(如_trace_id),导致整个请求被拒 -
datetime字段默认只接受 ISO 8601("2023-01-01T12:00:00")或date字符串,不支持 Unix timestamp 或中文格式时间 - 嵌套模型里字段缺失时,不会静默填
None,而是明确报missing错误——这和手写 dict.get() 行为完全不同
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










