当前位置: 首页 > ai >正文

数据验证库pydantic的用法

数据验证库pydantic

    • 1. 当你的代码需要验证数据的情况
    • 2. 推荐使用pydantic, Pydantic效率加倍!
      • 2.1 如果这个时候当产品说要加"密码必须包含大小写"时,我只需要改一行代码就可以搞定了!
    • 3. Pydantic 的核心价值
    • 4. 4个超能力让你直呼内行
      • 4.1 智能类型转换超贴心
      • 4.2 错误提示超级详细
      • 4.3 嵌套数据结构也能轻松搞定
      • 4.4 配置文件管理神器

1. 当你的代码需要验证数据的情况


def register_user(data):if not isinstance(data.get("name"), str):raise ValueError("名字必须是字符串")if len(data.get("password")) < 6:raise ValueError("密码不能短于6位")if not re.match(r'^[\w\.-]+@[\w\.-]+$', data.get("email")):raise ValueError("邮箱格式不对")# 还有20多个if判断...

2. 推荐使用pydantic, Pydantic效率加倍!


from pydantic import BaseModel, EmailStr, constrclass User(BaseModel):name: strpassword: constr(min_length=6)email: EmailStrphone: str  # 后面加个正则就行# 使用只要1行!
valid_data = User(**input_data)

2.1 如果这个时候当产品说要加"密码必须包含大小写"时,我只需要改一行代码就可以搞定了!

password: constr(min_length=6, regex="^(?=.*[a-z])(?=.*[A-Z])")

3. Pydantic 的核心价值

复合规则支持(内置EmailStr、constr等)高级类型,而且还能结构化错误输出(明确标识每个字段的验证问题),非常香!


from pydantic import BaseModel, EmailStr, constrclass UserRegistration(BaseModel):username: strpassword: constr(min_length=8, regex=r"^(?=.*[a-z])(?=.*[A-Z])")email: EmailStrphone: str  # 可通过Field添加更复杂规则# 数据验证实例化
try:user_data = UserRegistration(username="tech_guide",password="Simple123",email="contact@example.com",phone="+86-13800138000")
except ValidationError as e:print(e.json(indent=2))

4. 4个超能力让你直呼内行

4.1 智能类型转换超贴心

(自动把"123"转成数字,再也不用写int()了!)


class Demo(BaseModel):age: intdemo = Demo(age="18")  # 自动转成整数18

4.2 错误提示超级详细


try:User(name=123, password="123", email="invalid")
except ValidationError as e:print(e.errors())---- 输出错误如下[{"loc": ("name",),"msg": "str类型 expected","type": "type_error.str"},{"loc": ("password",),"msg": "最少需要6个字符","type": "value_error.any_str.min_length"},{"loc": ("email",),"msg": "邮箱格式错误","type": "value_error.email"}
]

4.3 嵌套数据结构也能轻松搞定

如果碰到需要处理JSON嵌套的场景,也是So easy!


class Address(BaseModel):city: strstreet: strclass User(BaseModel):name: straddress: Addressdata = {"name": "张三","address": {"city": "北京","street": "朝阳区"}
}
user = User(**data)

4.4 配置文件管理神器

# 假设这是你的配置文件 config.json
{"database_url": "postgresql://user:pass@localhost/db","timeout": 3.5
}# 定义配置模型
from pydantic import BaseModelclass Settings(BaseModel):debug: bool = False        # 默认值 Falsedatabase_url: str          # 必填字段timeout: float = 5.0       # 默认值 5.0# 加载配置的函数示例
def load_config():return {"database_url": "postgresql://user:pass@localhost/db","timeout": 3.5}# 使用示例
settings = Settings(**load_config())print(settings)
# 输出:debug=False database_url='postgresql://user:pass@localhost/db' timeout=3.5# 如果尝试错误配置会抛出验证错误:
try:Settings(database_url=123)  # 类型错误
except Exception as e:print(e)# 输出:1 validation error for Settings# database_url#   Input should be a valid string [type=string_type, input_value=123, input_type=int]
http://www.xdnf.cn/news/5887.html

相关文章:

  • 力扣热题——统计平衡排列的数目
  • 进程间通信分类
  • 数组练习题
  • 采购流程规范化如何实现?日事清流程自动化助力需求、采购、财务高效协作
  • 动态查找滚动容器(通用方案)
  • 故障诊断模型评估——混淆矩阵,如何使样本量一致(上)
  • 深入浅出之STL源码分析8_三个指针
  • PostgreSQL 恢复信息函数
  • Android Exoplayer多路不同时长音视频混合播放
  • window 显示驱动开发-报告图形内存(一)
  • ElasticSeach快速上手笔记-入门篇
  • VScode 的插件本地更改后怎么生效
  • 嵌入式学习--江协51单片机day5
  • React百日学习计划——Deepseek版
  • 销量预测评估指标
  • 【工作记录】Kong Gateway 入门篇之部署及简单测试
  • mpegts.js 播放flv视频报错:PIPELINE_ERROR_DECODE: video decode error!
  • FlashInfer - 安装
  • 理解 Open vSwitch (OVS)
  • 一键转换上百文件 Word 批量转 PDF 软件批量工具
  • 大模型——Crawl4AI为 LLM 和 RAG 准备高质量网页数据
  • ‌Element UI 双击事件(@cell-dblclick 与 @row-dblclick)
  • 函数式方法的实现(JDK8+)
  • 洛谷 P3374 【模板】树状数组 1(树状数组解法)
  • C#高级编程:设计模式原则
  • 第28节:现代CNN架构-ResNet与残差连接
  • Android加固工具测评:易盾、顶象、360加固哪款更好用?
  • 【源码+文档+调试讲解】党员之家服务系统小程序1
  • 如何同步虚拟机文件夹
  • Linux精确列出非法 UTF-8 字符的路径或文件名