Pydantic:强大的Python 数据验证库



Pydantic

Pydantic 是一个在 Python 中用于数据验证和解析的第三方库。它提供了一种简单且直观的方式来定义数据模型,并使用这些模型对数据进行验证和转换。

Pydantic 的一些主要特性:

  1. 类型注解:Pydantic 使用类型注解来定义模型的字段类型。你可以使用 Python 内置的类型、自定义类型或者其他 Pydantic 提供的验证类型。
  2. 数据验证:Pydantic 自动根据模型定义进行数据验证。它会检查字段的类型、长度、范围等,并自动报告验证错误。你可以使用 ValidationError 异常来捕获验证错误。
  3. 模型转换:Pydantic 提供了从各种数据格式(例如 JSON、字典)到模型实例的转换功能。它可以自动将输入数据解析成模型实例,并保留类型安全性和验证规则。

Pydantic 使用前需要先进行安装。

bashpip install pydantic

Pydantic 基本操作

使用 Pydantic,可以定义一个模型类,该类需要继承 pydantic 中的 BaseModel 类,模型类描述了数据的结构和类型,并指定验证规则。

然后,可以使用这个模型类来验证输入的数据是否符合预期,并以类型安全的方式访问和操作数据。

pythonfrom pydantic import BaseModel, ValidationError
class User(BaseModel):    
    name: str    
    age: int    
    email: str
try:    
    user = User(name="Alice", age="30", email="alice@example.com") 
except ValidationError as e:    
    print(e.json())

如果创建实例的数据不符合类型注解的要求,则会报 ValidationError 错误。

Pydantic 高级操作

Pydantic 还可以结合 typing 模块,进行默认值,可选字段属性等验证的高级操作。甚至还可以通过 EmailStr 类来直接验证邮件正确性,但该类依赖一个第三方模块,在使用前需要使用 pip install email-validator 进行安装后才可以使用。

from typing import Optional
from pydantic import BaseModel, EmailStr
class User(BaseModel):    
    name: str    
    age: int    
    email: EmailStr    
    phone: Optional[str] = None

user = User(name="Alice", age=30, email="alice@example.com")  # 有效
user = User(name="Alice", age=30, email="invalid_email")  # 错误:无效的电子邮件

Field 对象

Field函数提供了许多参数来定制字段的行为。以下是一些常用的参数:

  • ...:表示该字段是必填项。
  • default:定义字段的默认值。如果未提供该值,则默认为None,不能与 ... 同时使用。
  • min_lengthmax_length:针对字符串类型的字段定义最小和最大长度限制。
  • gtgeltle:针对数值类型的字段定义大于 gt、大于等于 ge、小于 lt 和小于等于 le 的限制。
from pydantic import BaseModel, EmailStr, ValidationError, Field
class User(BaseModel):    
    name: str = Field(..., min_length=1, max_length=10)    
    age: int = Field(..., ge=0, le=200)    
    email: EmailStr    
    phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = None
try:    
    user = User(name="Tom", age=22, email="alice@example.com")
except ValidationError as e:    
    a = eval(e.json())    
    print(a[0]["msg"])
finally:    
    print(user)

数据转换

通过定义模型类,可以将通过网络传输或数据库查询的数据转换成模型类对象在程序中使用。

反之,也可以将处理过后的模型类对象转换成对应的字典或 JSON 数据进行存储或传输。

模型类转换为字典

使用 模型类.model_dump() 方法可以将一个模型类实例对象转换为字典类型数据。

from pydantic import BaseModel, EmailStr, Field
class User(BaseModel):    
    name: str = Field(..., min_length=1, max_length=10)    
    age: int = Field(..., ge=0, le=200)    
    email: EmailStr    
    phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = User(name="Tom", age=22, email="alice@example.com")
data = User.model_dump(user)
print(data)
print(type(data))

模型类转换为JSON

使用 模型类.model_dump_json() 方法可以将一个模型类实例对象转换为 JSON 字符串。

from pydantic import BaseModel, EmailStr, Field
class User(BaseModel):    
    name: str = Field(..., min_length=1, max_length=10)    
    age: int = Field(..., ge=0, le=200)    
    email: EmailStr    
    phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = User(name="Tom", age=22, email="alice@example.com")
data = User.model_dump_json(user)
print(data)
print(type(data))



相关文章

5分钟,快速入门 Python JWT 接口认证

来源:AirPython作者:星安果1. 前言大家好,我是安果!为了反爬或限流节流,后端编写接口时,大部分 API 都会进行权限认证,只有认证通过,即:数据正常及未过期才会返回数据,否则直接报错本篇文...

Python软件包存储库PyPI上线“数字认证”功能:一键验明真身

IT之家 11 月 16 日消息,Python 软件包存储库 PyPI 现已上线数字认证(Digital Attestations)功能,这项功能允许软件包维护者在发布包时附加经过身份验证的数字签章,...

Python:教你使用正则表达式 (RegEx) 验证电子邮件地址

正则表达式,或简称RegEx,是可用于文本搜索和替换操作、验证、字符串拆分等的模式表达式。这些模式由字符、数字和特殊字符组成,其形式使模式与我们正在搜索的某些文本段相匹配。正则表达式广泛用于模式匹配,...

(值得收藏)Python爬虫过程中验证码识别的三种解决方案

前言在Python爬虫过程中,有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是人阅读访问还是机器爬虫。验证码问题看似简单,想做到准确率很高,也是一件不容易的事情。为了更好学习爬虫,后续推文...

python机器学习:机器学习模型评价-交叉验证与留一验证

一篇文章写清楚一个问题,关注我,自学python!解决一个机器学习问题都是从问题建模开始,我们首先要收集问题资料,深入理解问题后将其抽象成机器可预测的问题。那么我们的学习模型表现究竟怎么样,该如何进行...

7个知识点快速掌握Python网页表单验证的利器

在构建功能完备且用户体验良好的Web应用时,表单验证是一个不可或缺的部分。本文将深入探讨如何使用 Flask 框架集成的 flask-wtf 库实现网页表单验证,并提供详细的代码示例以助您快速掌握这一...