Pydantic:手动验证的终结! ✨
golang学习网今天将给大家带来《Pydantic:手动验证的终结! ✨》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习文章或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!
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', id="1", priority="yes") print(task)
结果将是
task(id=1, due_date=datetime.datetime(2024, 10, 15, 15, 30), priority=true)
自定义验证
您还可以使用验证器在模型中定义自定义验证逻辑。它们允许您应用更复杂的验证规则,这些规则无法使用内置类型或字段约束轻松表达。验证器是通过 field_validator 装饰器或 field 对象定义的。您可以将一个或多个字段名称传递给 field_validator,以确定哪些字段将使用此验证器,或者通过“*”为每个字段应用验证器。
from typing import Any from pydantic import Field, field_validator, EmailStr, BaseModel class User(BaseModel): id: int username: str = Field(pattern=r'^\w+$') email: EmailStr age: int = Field(18, ge=14) is_active: bool = True roles: list[str] # Define validator executed 'before' internal parsing @field_validator('roles', mode='before') def _validate_roles(cls, value: Any): return value.split(',') if isinstance(value, str) else value user = User(id=1, username='john', email='john@example.com', roles='student,singer') print(user) # id=1 username='john' email='john@example.com' age=18 is_active=True roles=['student', 'singer']
开源项目
有很多由 pydantic 支持的开源项目。让我们探索其中最好的:
快速api
pydantic 最突出的用例之一是 fastapi,这是一个使用 python 构建 api 的现代 web 框架。 fastapi 广泛使用 pydantic 模型进行请求正文验证、查询参数和响应模式。
- 来源: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:手动验证的终结! ✨》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

- 上一篇
- Linux 发行版中令人困惑的 JRE 和 JDK 包命名

- 下一篇
- Python Socket 响应 HTTP 请求时,如何确保 HTML 文件完整显示?
-
- 文章 · python教程 | 38分钟前 |
- Python工厂模式使用技巧大全
- 361浏览 收藏
-
- 文章 · python教程 | 1小时前 | scikit-learn DBSCAN 数据预处理 K-means 轮廓系数
- Python聚类分析实用方法与技巧
- 494浏览 收藏
-
- 文章 · python教程 | 9小时前 |
- VSCode配置Python:插件推荐及调试攻略
- 390浏览 收藏
-
- 文章 · python教程 | 10小时前 | 嵌套结构 安全性 json.loads() try-except ujson
- Python解析JSON响应的详细教程
- 492浏览 收藏
-
- 文章 · python教程 | 10小时前 |
- Python数据归一化技巧详解
- 371浏览 收藏
-
- 文章 · python教程 | 10小时前 |
- 数据类型转换技巧与方法全解析
- 176浏览 收藏
-
- 文章 · python教程 | 11小时前 |
- Python轻松重命名文件的技巧
- 207浏览 收藏
-
- 文章 · python教程 | 11小时前 |
- Python工厂模式使用技巧与示例详解
- 178浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- AI Make Song
- AI Make Song是一款革命性的AI音乐生成平台,提供文本和歌词转音乐的双模式输入,支持多语言及商业友好版权体系。无论你是音乐爱好者、内容创作者还是广告从业者,都能在这里实现“用文字创造音乐”的梦想。平台已生成超百万首原创音乐,覆盖全球20个国家,用户满意度高达95%。
- 2次使用
-
- SongGenerator
- 探索SongGenerator.io,零门槛、全免费的AI音乐生成器。无需注册,通过简单文本输入即可生成多风格音乐,适用于内容创作者、音乐爱好者和教育工作者。日均生成量超10万次,全球50国家用户信赖。
- 2次使用
-
- BeArt AI换脸
- 探索BeArt AI换脸工具,免费在线使用,无需下载软件,即可对照片、视频和GIF进行高质量换脸。体验快速、流畅、无水印的换脸效果,适用于娱乐创作、影视制作、广告营销等多种场景。
- 2次使用
-
- 协启动
- SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
- 9次使用
-
- Brev AI
- 探索Brev AI,一个无需注册即可免费使用的AI音乐创作平台,提供多功能工具如音乐生成、去人声、歌词创作等,适用于内容创作、商业配乐和个人创作,满足您的音乐需求。
- 10次使用
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览