软件测试|Pydantic BaseModel使用详解

简介

当我们在Python中编写应用程序时,通常需要处理和验证数据。Pydantic 是一个流行的库,它可以帮助我们·定义数据模型并自动进行数据验证。在Pydantic中,BaseModel是一个核心概念,它用于定义数据模型和验证输入数据。在这篇文章中,我们将详细介绍如何使用Pydantic的BaseModel来创建和验证数据模型。

为什么使用BaseModel?

Pydantic 是一个Python库,用于数据验证和解析。它允许你定义数据模型,然后使用这些模型来验证和解析输入数据。Pydantic的一个关键特性是它的类型提示,这使得代码更加清晰和易于理解。

Pydantic中,BaseModel是一个抽象基类,用于定义数据模型。它提供了一种简单而强大的方法来描述数据的结构和验证数据的有效性。使用BaseModel可以帮助我们减少手动验证代码的编写,提高代码的可维护性。

创建一个简单的BaseModel

让我们从一个简单的例子开始,假设我们正在开发一个应用程序,需要处理用户的个人信息。我们可以使用BaseModel来定义一个用户数据模型:

from pydantic import BaseModelclass User(BaseModel):username: stremail: strage: int

在这个例子中,我们定义了一个名为UserBaseModel,它有三个字段:usernameemailage,分别代表用户的用户名、电子邮件地址和年龄。字段后面的类型提示是必需的,Pydantic会使用它们来验证输入数据的类型。

使用BaseModel验证数据

一旦我们定义了User模型,我们可以使用它来验证数据。假设我们已经有一些用户提供的数据,那我们可以将这些数据作为字典传递给User类的构造函数,Pydantic会自动验证数据并创建一个User对象:

user_data = {"username": "john_doe","email": "john@example.com","age": 30
}user = User(**user_data)
print(user)-------------
输出结果如下:
username='john_doe' email='john@example.com' age=30

如果提供的数据与模型不匹配,Pydantic会引发一个ValidationError异常。我们可以使用tryexcept来捕获这个异常并处理验证错误:

from pydantic import ValidationErroruser_data = {"username": "john_doe","email": ["invalid_email"],"age": "30"
}try:user = User(**user_data)
except ValidationError as e:print(e)

在这个例子中,邮箱的数据类型错误,所以Pydantic引发了一个ValidationError

使用默认值和可选字段

有时候,某些字段可能是可选的,或者我们想要为字段提供默认值。在Pydantic中,我们可以使用Field类来实现这些功能:

from pydantic import BaseModel, Fieldclass User(BaseModel):username: str = Field(..., min_length=3)email: strage: int = Field(default=18, ge=0)

在这个例子中,username字段是必需的,且必须至少包含3个字符,email字段是可选的,age字段有一个默认值为18,且必须大于等于0。

使用嵌套模型

在实际应用中,我们可能需要定义复杂的数据模型,包括嵌套模型。当然Pydantic支持嵌套模型的定义和验证:

from pydantic import BaseModelclass Address(BaseModel):street: strcity: strzip_code: strclass User(BaseModel):username: stremail: strage: intaddress: Address

在这个例子中,User模型包含一个嵌套的Address模型。我们可以像往常一样使用User模型来验证数据,包括嵌套的数据:

user_data = {"username": "Muller","email": "muller@example.com","age": 30,"address": {"street": "nanjing road","city": "Shanghai","zip_code": "10001"}
}
user = User(**user_data)
print(user)-----------------
输出如下:
username='Muller' email='muller@example.com' age=30 address=Address(street='nanjing road', city='Shanghai', zip_code='10001')

总结

PydanticBaseModel提供了一个强大的工具,用于定义和验证数据模型。通过使用BaseModel,我们可以减少手动验证数据的工作量,并提高代码的可读性和可维护性。希望这篇文章能帮助大家更好地理解如何使用PydanticBaseModel来创建和验证数据模型。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【管理篇 / 升级】❀ 13. FortiOS 7.4固件升级新规则 ❀ FortiGate 防火墙

【简介】飞塔防火墙的固件升级一直是所有厂家中最好的。只要有注册官方帐号,有注册设备,并且只要有一台设备在服务期内,即可下载所有型号的所有版本的固件。即使其它设备服务期已过,也可以通过固件文件手动升级,避免防…

VMware安装CentOS7虚拟机

VMware 安装 获取 VMware 安装包 下载地址:链接:https://pan.baidu.com/s/1ELR5NZa7rO6YVplZ1IUigw?pwdplz3 提取码:plz3 包括:当然,也可以自己去别的地方下载,WMware 版本都差不多,现在用的比…

Vulnhub-DC1

前言 一个比较简单的实战靶场,官方要求是找到/root下的flag,所以直接提权即可。但对于学习和训练来说还是太简略了,在打靶场的时候还是全面一些较好。 本次靶场实战涉及信息收集、漏洞查找与利用、getshell、数据库渗透、密码破解、linux提…

创建mysql普通用户

一、创建mysql普通用户的原因: 权限控制:MySQL的权限系统允许您为每个用户分配特定的权限。通过创建普通用户,您可以根据需要为每个用户分配特定的数据库和表权限,而不是将所有权限授予一个全局管理员用户。这有助于提高数据库的…

[Docker] Docker为什么出现

Docker为什么出现 一款产品: 开发–上线 -->两套环境 | 应用配置 开发即运维! 环境配置十分麻烦,每一个机器都要部署环境(Redis, ES, Hadoop) 费时费力 项目带上配置环境安装打包。 传统: 开发jar&…

Python自动化测试框架【生成测试报告】

如何才能让用例自动运行完之后,生成一张直观可看易懂的测试报告呢? 小编使用的是unittest的一个扩展HTMLTestRunner 环境准备 使用之前,我们需要下载HTMLTestRunner.py文件 点击HTMLTestRunner后进入的是一个写满代码的网页,小…

三、GCC编译:链接

代码准备 main.c extern int shared; extern void func(int *a, int *b); int main(){int a 100;func(&a, &shared);return 0; }func.c int shared 1; int tmp 0; void func(int *a, int *b){tmp *a;*a *b;*b tmp; }静态链接 编译 gcc -static -fno-stack-p…

SpringBoot懒加载

什么是懒加载 懒加载是一种优化技术,它延迟加载或按需加载资源,以减少初始加载时间或提高性能。在不同的上下文中,懒加载有不同的应用和含义。在web开发中,懒加载通常指的是延迟加载图片数据。在长网页或应用中,如果图…

ruoyi后台管理系统部署-4-安装nginx

yum 安装 ngix 1.24 yum 官方源安装: # 1. 需要预先安装 yum-utils sudo yum install yum-utils # 2. 配置yum repo touch /etc/yum.repos.d/nginx.repongix.repo: [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$…

Mac安装nvm以及使用nvm安装node

1. 安装nvm命令 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags2. 配置环境变量 vi ~/.bash_profileexport NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] &&…

【书生·浦语】大模型实战营——第五课作业

教程文档:https://github.com/InternLM/tutorial/blob/vansin-patch-4/lmdeploy/lmdeploy.md#tritonserver-%E6%9C%8D%E5%8A%A1%E4%BD%9C%E4%B8%BA%E5%90%8E%E7%AB%AF 视频链接: 作业: 基础作业 使用如下命令创建conda环境 conda create…

SpringBoot+thymeleaf实战遇到的问题

目录 一、控制台: 二、数据库查询异常: 三、前后端错误校验 四、在serviceImp中需要添加一个eq条件,表示和数据库中的哪个字段进行比较,否则会查出所有数据,导致500 五、使用流转换数据更简洁 六、重复报错&…

AI软件开发:探索原理、挑战与未来趋势

AI软件开发已经成为当前最热门和具有前景的技术领域之一。随着人工智能技术的快速发展,AI软件的应用范围也在不断扩大。本文将主要探讨AI软件开发的原理、挑战以及未来的趋势。 首先,AI软件开发的原理是基于机器学习和深度学习算法。机器学习是一种通过…

ssm基于web的电影购票系统+vue论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统电影购票信息管理难度大,容错率低&#xff0c…

C#无标题栏窗体拖动代码

文章目录 一、概念二、案例三、常见问题四、链接 一、概念 C#(C Sharp)是由微软公司开发的一种面向对象的编程语言。它是从C和C语言演化而来的,并结合了Java和其他编程语言的特性。C#是微软.NET平台的一部分,允许开发人员创建各种…

GAMES101:作业7记录

1. 总览 在之前的练习中,我们实现了 Whitted-Style Ray Tracing 算法,并且用 BVH等加速结构对于求交过程进行了加速。在本次实验中,我们将在上一次实验的基础上实现完整的 Path Tracing 算法。至此,我们已经来到了光线追踪版块的最后一节内容。 请认真阅读本文档,按照本文档指…

使用swift创建第一个ios程序

一、安装xcode 先到app store中下载一个Xcode app 二、创建项目 1、项目设定 创建ios app 2、工程结构 三、修改代码实现按键联动 四、运行测试

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

YOLOv8 Ultralytics:使用Ultralytics框架进行FastSAM图像分割

YOLOv8 Ultralytics:使用Ultralytics框架进行FastSAM图像分割 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行FastSAM图像分割参考文献 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容…

SpringCloud:Ribbon

文章目录 Ribbon快速入门Ribbon负载均衡算法常见的负载均衡算法更改算法规则修改配置 饥饿加载 Ribbon ribbon是一个客户端负载均衡器,会从注册中心拉取可用服务,当客户端需要获取服务请求时,ribbon能够解析服务地址并实现负载均衡 快速入门 …