python中的 Pydantic 框架介绍

 Pydantic 框架介绍

Pydantic 是一个用于数据验证和设置管理的 Python 库。它主要通过数据模型类的定义来处理 JSON 数据、解析请求和响应数据,并提供自动化的验证和转换。Pydantic 主要用于处理 Python 类型的安全性和验证,尤其在 FastAPI 等现代 Python Web 框架中得到广泛应用。

Pydantic 提供了一个强大的功能,允许你定义模型并自动进行类型检查、数据验证和错误处理。它的设计理念是 数据校验与数据结构化,使得开发者能够轻松实现 API 输入数据的验证,同时提高代码的可维护性和可读性。

 Pydantic 的核心特性

1. 基于 Python 类型提示(Type Hints)
   - Pydantic 使用 Python 类型提示来定义数据模型。你可以直接通过 Python 的类型注解(如 str, int, float, List[Type] 等)来指定字段的类型。
   - 类型提示会自动与输入数据进行匹配,并进行转换和验证。

2. 数据验证
   - Pydantic 会自动验证输入的数据类型是否与模型中定义的类型匹配。例如,str 类型的字段如果传入了非字符串的数据,Pydantic 会抛出验证错误。
   - 还支持更复杂的验证,如字符串长度、数字范围等。

3. 自动转换
   - Pydantic 支持自动类型转换,例如,如果你传入一个字符串 "123" 给 int 类型字段,它会自动将字符串转换为整数 123。

4. 支持嵌套模型
   - Pydantic 允许你定义嵌套模型。例如,你可以在一个模型中引用另一个模型作为字段,这样可以方便地进行复杂的数据结构化。

5. 支持数据导出
   - Pydantic 模型不仅支持数据验证,还支持模型的序列化与反序列化,自动将模型转为字典格式或者 JSON 格式,这对于 Web 开发尤其重要。

6. 性能优越
   - Pydantic 是基于 Python 的 dataclasses 和 typing 库构建的,它的性能非常优越,能够高效处理数据验证工作。

7. 错误处理
   - 当数据验证失败时,Pydantic 会提供详细的错误信息,帮助开发者定位问题,错误信息通常包括字段名、错误类型以及错误描述。

 示例

以下是一个使用 Pydantic 定义简单数据模型的示例:

python
from pydantic import BaseModel, Field
from typing import Optional

 定义 Pydantic 模型
class User(BaseModel):
    username: str
    email: str
    age: Optional[int] = Field(None, ge=18)   可选字段,且年龄必须大于等于18

 创建模型实例
user_data = {
    "username": "alice",
    "email": "alice@example.com",
    "age": 25
}

 校验数据并创建模型实例
user = User(user_data)

 访问模型字段
print(user.username)   输出: alice
print(user.dict())   输出: {'username': 'alice', 'email': 'alice@example.com', 'age': 25}


 关键组件

1. BaseModel
   - BaseModel 是 Pydantic 中所有模型的基类。通过继承 BaseModel,你可以创建自定义的 Pydantic 数据模型。
   
2. Field
   - Field 是用来定义字段的额外参数的。你可以通过它设置字段的默认值、描述、验证规则等。Field 是一个非常有用的工具,可以用来实现如最小/最大值、长度限制、正则表达式验证等功能。

3. Optional
   - Optional 是一个类型提示,用于指定一个字段可以是 None,也可以是某种类型。这使得该字段成为可选项。

4. 模型的序列化与反序列化
   - model.dict() 可以将模型实例转化为 Python 字典,方便进行 JSON 序列化。
   - model.json() 可以将模型转化为 JSON 字符串。

 使用场景

1. Web 开发:
   - Pydantic 与 FastAPI 配合使用,在 API 的请求体(如 JSON 数据)和响应体中进行自动验证、转换和文档生成。
   
2. 数据处理:
   - 用于处理外部 API 返回的数据,确保数据符合预期格式,并进行必要的转换。

3. 配置文件:
   - Pydantic 也可以用于配置文件的读取与校验,例如从 .env 文件读取配置并验证其格式。

 示例:FastAPI 使用 Pydantic

FastAPI 是基于 Pydantic 的 Web 框架,Pydantic 的模型被用来验证请求和响应数据。以下是 FastAPI 中使用 Pydantic 模型的示例:

python
from fastapi import FastAPI
from pydantic import BaseModel

 定义 Pydantic 数据模型
class User(BaseModel):
    username: str
    email: str
    age: int

 创建 FastAPI 实例
app = FastAPI()

 定义 POST 请求路由
@app.post("/create-user/")
async def create_user(user: User):
    return {"username": user.username, "email": user.email, "age": user.age}


在这个示例中,User 模型用于验证来自客户端的 JSON 请求体数据。如果数据不符合模型定义的要求,FastAPI 会自动返回 422 错误和详细的验证错误信息。

 总结

Pydantic 是一个功能强大的数据验证和管理工具,能够简化 Python 应用中数据的验证、转换和序列化过程。它的核心优势包括:
- 基于 Python 类型提示
- 高效的性能
- 自动验证和转换
- 易于与 FastAPI 等 Web 框架集成

通过使用 Pydantic,开发者可以确保数据的有效性,减少手动验证的工作,并提高代码的可维护性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35231.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Socket编程-tcp

1. 前言 在tcp套接字编程这里,我们将完成两份代码,一份是基于tcp实现普通的对话,另一份加上业务,client输入要执行的命令,server将执行结果返回给client 2. tcp_echo_server 与udp类似,前两步&#xff1…

Python使用Selenium自动实现表单填写之蛇年纪念币蛇钞预约(附源码,源码有注释解析,已测试可用

Python实现纪念币预约自动填写表单 声明:本文只做技术交流,不可用代码为商业用途,文末有源码下载,已测试可用。 Part 1 配置文件改写(源码 有详细的注释说明 读取配置文件,自己组数据库,录入信息 配置文件 Part 2 主函数 每一期的xpath路径都不一样 所以需要提前去网站…

【计算机网络】期末速成(2)

部分内容来源于网络,侵删~ 第五章 传输层 概述 传输层提供进程和进程之间的逻辑通信,靠**套接字Socket(主机IP地址,端口号)**找到应用进程。 传输层会对收到的报文进行差错检测。 比特流(物理层)-> 数据帧(数据链路层) -> 分组 / I…

Vue3网站锚点定位

网站上实现锚点定位的方法有很多&#xff0c;今天介绍vue3实现的定位效果的方式。通过scrollIntoViewh函数的行为&#xff0c;滑动至指定的容器。 一、样式布局 <template> <div style"width: 100%; display: flex;flex-direction: column;"><div …

微信小程序实现图片拖拽调换位置效果 -- 开箱即用

在编写类似发布朋友圈功能的功能时&#xff0c;需要实现图片的拖拽排序&#xff0c;删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码&#xff0c;可以在威信中搜索&#xff1a;我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…

五、docker的网络模式

五、docker的网络模式 5.1 Docker的四种网络模式 当你安装docker时&#xff0c;它会自动创建三个网络&#xff0c;可使用如下命令查看&#xff1a; [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 7390284b02d6 bridge bridge lo…

ros项目dual_arm_pick-place(对比moveit配置助手生成的文件)

目录 前言正文gazebo_controllers.yaml变更ros_controllers.yaml变更simple_moveit_controllers.yaml变更moveit_planning_execution.launch变更ros_controllers.launch变更其他文件 汇总总结 前言 在本专栏前文中讲到&#xff0c;作者有moveit配置助手导出的包marmbots&#…

【uni-app 微信小程序】新版本发布提示用户进行更新

知识准备 uni.getUpdateManager文档介绍 不支持APP与H5&#xff0c;所以在使用的时候要做好平台类型的判断&#xff0c;如何判断&#xff0c;参考条件编译处理多端差异 代码参考 export const updateApp () > {const updateManager uni.getUpdateManager()updateManag…

Java-操作xls替换文本或图片

准备xls模板文件&#xff1a;template.xls 要求根据不同的产品型号和图片&#xff0c;插入到模板文件中&#xff0c;然后再填充产品信息。 准备需要替换的图片和数据 功能实现 package net.work.controller.base;import io.swagger.annotations.Api; import io.swagger.annot…

.Net学习

1 什么是.NET Core .NET是开发平台&#xff0c;.NET Framework、.NET Core、Xamaarin/Mono的统称。 .NET Framework是只能在Windows上开发的技术 .NET Core是可以跨平台开发的技术 Xamaarin/Mono是移动端开发的技术 .NET Core&#xff1a;跨平台、免费、开源&#xff0c;可…

半监督学习与数据增强

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【成功解决:Can‘t uninstall ‘ultralytics‘. No files were found to uninstall.】

问题&#xff1a; 尝试卸载ultralytics时&#xff0c;使用pip uninstall ultralytics命令&#xff0c;已经卸载了ultralytics&#xff0c;但是仍出现Cant uninstall ultralytics. No files were found to uninstall&#xff0c;导致无法卸载干净。 原因 ultralytics相应的dis…

AcWing 3496. 特殊年份

文章目录 前言代码思路 前言 写简单题没啥。反正都是要写的&#xff0c;先把能拿到的分数拿了&#xff0c;之后有机会再去啃一啃硬骨头。啃不下来就算了。 代码 #include<bits/stdc.h> using namespace std; char a1[10],a2[10],a3[10],a4[10],a5[10]; int main(){cin…

MongoDB性能监控工具

mongostat mongostat是MongoDB自带的监控工具&#xff0c;其可以提供数据库节点或者整个集群当前的状态视图。该功能的设计非常类似于Linux系统中的vmstat命令&#xff0c;可以呈现出实时的状态变化。不同的是&#xff0c;mongostat所监视的对象是数据库进程。mongostat常用于…

【LeetCode: 999. 可以被一步捕获的棋子数 + 模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

智创 AI 新视界 -- 优化 AI 模型训练效率的策略与技巧(16 - 1)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

专业140+总分420+上海交通大学819考研经验上交电子信息与通信工程,真题,大纲,参考书。博睿泽信息通信考研论坛,信息通信考研Jenny

考研结束&#xff0c;专业819信号系统与信号处理140&#xff0c;总分420&#xff0c;终于梦圆交大&#xff0c;高考时敢都不敢想目标&#xff0c;现在已经成为现实&#xff0c;考研后劲很大&#xff0c;这一年的复习经历&#xff0c;还是历历在目&#xff0c;整理一下&#xff…

K8S服务突然中断无法访问:报The node had condition: [DiskPressure]异常

一、背景 程序在运行过程中&#xff0c;突然无法访问&#xff0c;发现后台接口也无法访问&#xff1b;查看kuboard&#xff0c;发现报如下异常&#xff1a;The node had condition: [DiskPressure]. 继续查看磁盘使用率&#xff0c;发现系统盘使用率已经高达93%。问题前后呼应…

【工具变量】上市公司企业违规数据(企业当年是否违规、企业当年违规的次数)2000-2022年

一、测算方式&#xff1a;参考C刊《当代财经》纪亚方&#xff08;2023&#xff09;老师的研究&#xff0c;通过对上市公司被处罚涉及的年份进行追溯&#xff0c;为了保证企业违规行为变量度量的准确性&#xff0c;将追溯到公司被处罚的年份定义为违规年份。 采用两个指标对企业…

视频孪生携手视联网 智汇云舟亮相中国电信2024数字科技生态大会

12月3日&#xff0c;由中国电信主办的“2024数字科技生态大会”在广州盛大开幕。活动现场&#xff0c;前沿科技与创新理念交相辉映&#xff0c;数字科技未来蓝图徐徐展开。智汇云舟作为中国电信的战略合作伙伴&#xff0c;受邀出席本次活动。 展会期间&#xff0c;以“天翼视联…