title: Pydantic字段级校验:解锁@validator的12种应用
date: 2025/3/23
updated: 2025/3/23
author: cmdragon
excerpt:
Pydantic校验系统支持通过pre验证器实现原始数据预处理,在类型转换前完成字符清洗等操作。格式验证涵盖正则表达式匹配与枚举值约束,确保护照编号等字段符合规范。动态校验机制处理跨字段依赖关系及环境感知验证,根据运行时条件调整校验规则。安全校验模块防御SQL注入与XSS攻击,采用字符过滤和HTML转义策略。高级转换功能实现地址标准化、敏感信息加密等数据处理,企业级实践包含分布式ID验证与金融精度控制。校验错误处理需关注类型一致性及验证顺序,遵循"早失败"原则构建模块化校验规则库,推荐使用参数化查询等最佳安全实践。
categories:
- 后端开发
- FastAPI
tags:
- Pydantic字段校验
- @validator高级应用
- 数据验证模式
- 防御式编程
- 校验器组合
- 动态依赖验证
- 企业级数据清洗
扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长
探索数千个预构建的 AI 应用,开启你的下一个伟大创意
第一章:基础校验模式
1.1 类型强制转换
from pydantic import BaseModel, validatorclass CurrencyConverter(BaseModel):amount: str@validator("amount", pre=True)def string_to_float(cls, v):return float(v.strip("$"))# 自动转换 "$100.5" → 100.5
print(CurrencyConverter(amount="$100.5").amount)
pre验证器特性:
- 在类型转换前执行
- 支持原始数据清洗
- 可处理非结构化输入
第二章:格式验证
2.1 正则表达式验证
import reclass IdentityForm(BaseModel):passport: str@validator("passport")def validate_passport(cls, v):if not re.match(r"^[A-PR-WY][1-9]\d\s?\d{4}[A-Z]$", v):raise ValueError("护照号码格式错误")return v.upper().replace(" ", "")
2.2 枚举值约束