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

Python-pydantic校验

Python-pydantic校验


1-知识整理

1-UV 环境管理

# 1-查看并指定环境
uv python list
uv python pin 3.10# 2-进行项目创建
uv init hello-pydantic && cd hello-pydantic# 3-指定本地运行环境
uv venv && source .venv/bin/activate# 4-本地环境安装依赖
uv pip install pydantic

2-pydantic功能

1-将dict转化为对象[校验必填+自动类型转化]

  • 校验必填->必填字段没有赋值就报错
  • 自动类型转化->string可以自定转化为int【前提是可以转】
# 使用pydantic定义Dict数据类型
class User(BaseModel):id: intname: stremail: strage: Optional[int] = None# 字符串 '123' 会被自动转换为整数 123
user_data_auto = {'id': '123','name': 'Bob','email': 'bob@example.com'
}# 将dict转化为对象[校验必填+自动类型转化]
user_auto = User(**user_data_auto)
print(f"validate_user_auto->", user_auto)

2- JSON 序列化

类比Java中的JsonUtil类,将【对象】【Map】【JsonString】进行互相转化

1-【对象->jsonString】->user_json_string = user.json()

2-【jsonString->对象】->user_from_json = User.parse_raw(user_json_string)

# 1-先准备对象数据(dict->对象)
user = User(**user_dict_data)# 2-对象实例转JSON(对象->jsonString)
user_json_string = user.json()
print(user_json_string)
# 输出: {"id": 1, "name": "Alice", "email": "alice@example.com", "age": 25}# 3-JSON 转模型实例(jsonString->对象)
user_from_json = User.parse_raw(user_json_string)
print(user_from_json)
# 输出: id=1 name='Alice' email='alice@example.com' age=25

3-字段复杂逻辑判断

from typing import Optionalfrom pydantic import BaseModel, ValidationError, field_validatorclass UserWithValidator(BaseModel):id: intname: stremail: strage: Optional[int] = None# 针对业务进行复杂逻辑校验@field_validator('age')@classmethoddef validate_age(cls, v: int) -> int:if v < 18:raise ValueError('Age must be at least 18')return v# 测试验证器
try:user_invalid_age = UserWithValidator(id=1, age=10, name='Dave', email='invalid-email')
except ValidationError as e:print(e)# 输出:# 1 validation error for UserWithValidator# age#   Value error, Age must be at least 18 [type=value_error, input_value=10, input_type=int]

2-pydantic校验详解

Pydantic 是一个在 Python 中用于数据验证和解析的库,它通过 Python 的类型注解(type hints)来定义数据模型,并自动进行数据验证、类型转换和序列化。Pydantic 的核心是 BaseModel 类,它允许你以类属性的方式定义字段,并自动处理数据验证。

Pydantic 的主要特点包括:

  • 类型安全:利用 Python 的类型注解,确保数据类型正确。
  • 自动验证:自动验证输入数据是否符合模型定义。
  • 错误处理:提供详细的错误信息,方便调试。
  • 性能高效:使用 Cython 优化,性能优越。
  • JSON 支持:轻松实现 JSON 序列化和反序列化。

安装 Pydantic

你可以使用 pip 安装 Pydantic:

pip install pydantic

基本使用示例

以下是使用 Pydantic 的最常用方法代码示例:

1. 定义模型
from pydantic import BaseModel, ValidationError
from typing import Optionalclass User(BaseModel):id: intname: stremail: strage: Optional[int] = None
2. 创建模型实例
# 正确数据
user_data = {'id': 1,'name': 'Alice','email': 'alice@example.com','age': 25
}user = User(**user_data)
print(user)
# 输出: id=1 name='Alice' email='alice@example.com' age=25
3. 自动类型转换
# 字符串 '123' 会被自动转换为整数 123
user_data_auto = {'id': '123','name': 'Bob','email': 'bob@example.com'
}user_auto = User(**user_data_auto)
print(user_auto)
# 输出: id=123 name='Bob' email='bob@example.com' age=None
4. 数据验证
# 错误数据,缺少必填字段
invalid_data = {'id': 1,'name': 'Charlie'
}try:user_invalid = User(**invalid_data)
except ValidationError as e:print(e)# 输出:# 1 validation error for User# email#   field required (type=value_error.missing)
5. JSON 序列化
# 模型实例转 JSON
user_json = user.json()
print(user_json)
# 输出: {"id": 1, "name": "Alice", "email": "alice@example.com", "age": 25}# JSON 转模型实例
user_from_json = User.parse_raw(user_json)
print(user_from_json)
# 输出: id=1 name='Alice' email='alice@example.com' age=25
6. 字段验证器(可选)
from typing import Optionalfrom pydantic import BaseModel, ValidationError, field_validatorclass UserWithValidator(BaseModel):id: intname: stremail: strage: Optional[int] = None@field_validator('age')@classmethoddef validate_age(cls, v: int) -> int:if v < 18:raise ValueError('Age must be at least 18')return v# 测试验证器
try:user_invalid_age = UserWithValidator(id=1, age=10, name='Dave', email='invalid-email')
except ValidationError as e:print(e)# 输出:# 1 validation error for UserWithValidator# age#   Value error, Age must be at least 18 [type=value_error, input_value=10, input_type=int]

总结

Pydantic 是一个功能强大且易于使用的库,适用于任何需要数据验证和解析的场景,如 Web 开发(FastAPI 就是基于 Pydantic)、配置文件解析、API 数据交互等。通过类型注解和自动验证,Pydantic 大大简化了数据处理的复杂性,提高了代码的健壮性和可维护性。


http://www.dtcms.com/a/526161.html

相关文章:

  • 哈尔滨 做网站鹤壁建设网站推广渠道电话
  • postgresql plancache --doing
  • dede 网站地图模板htm无锡网站制作工作室
  • OUC AI Lab 第四章:即插即用的注意力机制
  • 长春阿凡达网站建设网站主持人制作网站代言人
  • 广州网站制作(信科网络)新闻类网站排版网站建设
  • 天津网站制作西安网站建设app开发
  • 图像处理基础
  • 网站制作-杭州嘉兴模板建站软件
  • 工商网站如何做企业增资北京公司响应式网站建设价位
  • 开通网站费用怎么做分录在网上做效果图赚钱的网站
  • p2p做网站山西省建设信息网站
  • ECAT PDO对比SDO
  • 蓝桥杯省赛-顺子日期
  • 旅游网站设计策划书违规网站备案
  • MAX30102脉搏血氧传感器相关内容整理(理论版)
  • 贵州城乡住房建设部网站快看点自媒体平台注册
  • 创建网站的快捷方式厦门易尔通做网站怎么样
  • MySQL 运算符详细说明
  • 厦门企业建站系统模板网页版梦幻西游东海渔歌怎么玩
  • 深圳市推广网站的公司基于asp.net电子商务网站开发实践中的关键技术和应用
  • NVM 安装 (Windows版本)
  • 网站建设存在的具体问题常德网红
  • 网站代理工具h5入口
  • wordpress 站内通知在墙外的优质网站
  • 北碚集团网站建设手机网站 动态 页面 好 静态页面好
  • 网站留言板怎么做phpsql网站建站企业
  • 企业展示型网站程序建筑设计公司注册
  • 自助个人免费网站打开网站是空白页面
  • 怎么做网站规划书利为汇wordpress教程