Pydantic 是一个 Python 数据验证和设置管理库。它使用 Python 类型提示来验证和解析数据,确保您的代码能够处理正确结构化和类型化的数据。通过利用 Python 的类似数据类的模型结构,Pydantic 可以轻松定义复杂数据的模式,并以干净的 Python 方式自动验证和序列化/反序列化数据。让我们来探讨一下主要功能:
数据验证
使用 Python 的类型提示根据模式自动验证输入数据。
from pydantic import BaseModel, ValidationError class User(BaseModel): id: int name: str email: str # Valid input user = User(id=1, name="John Doe", email="john@example.com") print(user) # Invalid input try: user = User(id="not-an-integer", name="Jane", email="jane@example.com") except ValidationError as err: print(err)
每当你想定义数据模型时,请使用 pydantic.BaseModel!
功能验证
Pydantic 提供了强大的工具,不仅可以验证数据模型,还可以验证函数的输入和输出。这是使用 @validate_call 装饰器实现的,允许您对函数参数和返回值强制执行严格的数据验证。如果提供的参数或返回类型与预期类型不匹配,则会引发 ValidationError。
from pydantic import validate_call @validate_call def greet(name: str, age: int) -> str: return f"Hello {name}, you are {age} years old." # Valid input print(greet("Alice", 30)) # Output: Hello Alice, you are 30 years old. # Invalid input try: greet("Bob", "not-a-number") except Exception as e: print(e)
通过在 @validate_call 中启用 validate_return 标志,Pydantic 还将根据其带注释的返回类型验证函数的返回值。这可确保函数遵循预期的输出模式。
from pydantic import validate_call @validate_call(validate_return=True) def calculate_square(number: int) -> int: return number ** 2 # Correct return type # Valid input and return print(calculate_square(4)) # Output: 16 # Invalid return value @validate_call(validate_return=True) def broken_square(number: int) -> int: return str(number ** 2) # Incorrect return type try: broken_square(4) except Exception as e: print(e)
解析
Pydantic 可以将复杂的嵌套结构(包括 JSON 数据)解析为模型对象。
from pydantic import BaseModel from typing import List class Item(BaseModel): name: str price: float class Order(BaseModel): items: List[Item] total: float # JSON-like data data = { "items": [ {"name": "Apple", "price": 1.2}, {"name": "Banana", "price": 0.8} ], "total": 2.0 } order = Order(**data) print(order) # items=[Item(name='Apple', price=1.2), Item(name='Banana', price=0.8)] total=2.0
序列化和反序列化
Pydantic 模型可以序列化为 JSON 或字典并重构回来。
from pydantic import BaseModel class User(BaseModel): id: int name: str email: str # Create a model instance user = User(id=1, name="Alice", email="alice@example.com") # Serialize to dictionary and JSON user_dict = user.model_dump() user_json = user.model_dump(mode='json') print("Dictionary:", user_dict) print("JSON:", user_json) # Deserialize back to the model new_user = User.model_validate(user_json) print("Parsed User:", new_user)
灵活的验证
数据验证不是强制类型验证。例如,如果您定义一个模型,其中 id、due_date 和优先级字段分别为 int、bool 和 datetime 类型,则可以传递:
- 数字字符串作为id
- ISO-8601、UTC 或其他日期格式的字符串作为 due_date
- 'yes'/'no'、'on'/'off'、'true'/'false'、1/0 等作为优先级
from sensei import APIModel from datetime import datetime class Task(APIModel): id: int due_date: datetime priority: bool task = Task(due_date='2024-10-15T15:30:00',> <p>The result will be<br> </p> <pre class="brush:php;toolbar:false">Task(id=1, due_date=datetime.datetime(2024, 10, 15, 15, 30), priority=True)
自定义验证
您还可以使用验证器在模型中定义自定义验证逻辑。它们允许您应用更复杂的验证规则,这些规则无法使用内置类型或字段约束轻松表达。验证器是通过 field_validator 装饰器或 Field 对象定义的。您可以将一个或多个字段名称传递给 field_validator,以确定哪些字段将使用此验证器,或通过“*”为每个字段应用验证器。
输入 import Any 从 pydantic 导入 Field、field_validator、EmailStr、BaseModel 用户类(基础模型): id:整数 用户名:str = Field(pattern=r'^w $') 电子邮件:EmailStr 年龄:int = Field(18,ge=14) is_active: 布尔 = True 角色:列表[str] # 定义验证器在内部解析“之前”执行 @field_validator('角色', mode='之前') def _validate_roles(cls,值:任意): 返回 value.split(',') if isinstance(value, str) else value user = User(id=1, 用户名='john', email='john@example.com', 角色='学生,歌手') 打印(用户)#> <h2> 开源项目 </h2> <p>有很多由 Pydantic 支持的开源项目。让我们探索其中最好的:</p> <h3> 快速API </h3> <p>Pydantic 最突出的用例之一是 FastAPI,这是一个使用 Python 构建 API 的现代 Web 框架。 FastAPI 广泛使用 Pydantic 模型进行请求正文验证、查询参数和响应模式。</p>
- 来源:https://github.com/fastapi/fastapi
- 文档:https://fastapi.tiangolo.com
老师
FastAPI 是为构建 API 而设计的,而 Sensei 则是为快速、轻松地包装这些 API 而设计的。由 Sensei 提供支持的 API 客户端可确保用户获得相关的数据模型,并且不会出现令人困惑的错误。
- 来源:https://github.com/CrocoFactory/sensei
- 文档:https://sensei.crocofactory.dev
SQLModel 和 Typer
SQLModel 和 Typer 是 FastAPI 的创建者 Sebastián Ramírez 开发的两个出色的项目。
SQLModel 是一个旨在简化 Python 应用程序中的数据库交互的库。 SQLModel 构建于 SQLAlchemy 和 Pydantic 之上,将 ORM 的强大功能与数据验证和序列化的便利性结合在一起。
- 来源:https://github.com/fastapi/sqlmodel
- 文档:https://sqlmodel.tiangolo.com
Typer 是一个使用 Python 创建命令行界面 (CLI) 应用程序的框架。它通过使用 Python 的类型提示自动生成用户友好的 CLI 命令和帮助文本来简化流程。
- 来源:https://github.com/fastapi/typer
- 文档:https://typer.tiangolo.com
以上是Pydantic:手动验证的终结! ✨的详细内容。更多信息请关注PHP中文网其他相关文章!

本教程演示如何使用Python处理Zipf定律这一统计概念,并展示Python在处理该定律时读取和排序大型文本文件的效率。 您可能想知道Zipf分布这个术语是什么意思。要理解这个术语,我们首先需要定义Zipf定律。别担心,我会尽量简化说明。 Zipf定律 Zipf定律简单来说就是:在一个大型自然语言语料库中,最频繁出现的词的出现频率大约是第二频繁词的两倍,是第三频繁词的三倍,是第四频繁词的四倍,以此类推。 让我们来看一个例子。如果您查看美国英语的Brown语料库,您会注意到最频繁出现的词是“th

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

处理嘈杂的图像是一个常见的问题,尤其是手机或低分辨率摄像头照片。 本教程使用OpenCV探索Python中的图像过滤技术来解决此问题。 图像过滤:功能强大的工具 图像过滤器

PDF 文件因其跨平台兼容性而广受欢迎,内容和布局在不同操作系统、阅读设备和软件上保持一致。然而,与 Python 处理纯文本文件不同,PDF 文件是二进制文件,结构更复杂,包含字体、颜色和图像等元素。 幸运的是,借助 Python 的外部模块,处理 PDF 文件并非难事。本文将使用 PyPDF2 模块演示如何打开 PDF 文件、打印页面和提取文本。关于 PDF 文件的创建和编辑,请参考我的另一篇教程。 准备工作 核心在于使用外部模块 PyPDF2。首先,使用 pip 安装它: pip 是 P

本教程演示了如何利用Redis缓存以提高Python应用程序的性能,特别是在Django框架内。 我们将介绍REDIS安装,Django配置和性能比较,以突出显示BENE

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

本教程演示了在Python 3中创建自定义管道数据结构,利用类和操作员超载以增强功能。 管道的灵活性在于它能够将一系列函数应用于数据集的能力,GE

Python是数据科学和处理的最爱,为高性能计算提供了丰富的生态系统。但是,Python中的并行编程提出了独特的挑战。本教程探讨了这些挑战,重点是全球解释


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!