Pydantic 数据验证

Pydantic 验证

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel, EmailStr, field_validator, ValidationErrordef check_name(v: str) -> str:"""Validator to be used throughout"""if not v.startswith("小"):raise ValueError("must be startswith 小")return vclass User(BaseModel):id: intname: str = "小卤蛋"age: int# email: EmailStrsignup_ts: Optional[datetime] = Nonefriends: List[str] = []validate_fields = field_validator("name")(check_name)@field_validator("age")  # 此处在pycharm中有warning,上下顺序不能变@classmethoddef check_age(cls, age):if age < 18:raise ValueError("用户年龄必须大于18岁")return ageif __name__ == '__main__':user_data = {"id": 123,"name": "小卤蛋","age": 12,"email": "xiaoludan@example.com",'signup_ts': '2024-07-19 00:22','friends': ["公众号:海哥python", '小天才', b''],}try:user = User(**user_data)print(user)except ValidationError as e:print(f"Validation error: {e.json()}")

调用BaseModel内部参数作为判断条件

class RegisterParams(BaseModel):visibility: VisibilityEnum = Field(VisibilityEnum.PRIVATE)publish_type: int = Field(..., description="类型")dept_codes: List[str] = Field(..., description="部门")@field_validator("publish_type")@classmethoddef check_publish_type(cls, publish_type, values):visibility = values.data.get('visibility').valueif visibility == 'public':publish_type = 0elif visibility == 'private':publish_type = 1else:publish_type = 2if publish_type not in [0, 1, 2]:raise ValueError("publish_type number is wrong.")return publish_type@field_validator("dept_codes")@classmethoddef check_dept_codes(cls, dept_codes, values):visibility = values.data.get('visibility').valueif visibility == 'internal':raise ValueError("dept_codes must be provided, can not be None or [].")return dept_codes

参考:

Pydantic:目前最流行的Python数据验证库_python pydantic-CSDN博客

Models - Pydantic

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

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

相关文章

LangChain——管道提示词 缓存

管道提示词 管道提示词可以将多个提示组合在一起。当我们想要使用部分提示时&#xff0c;这会很有用。这里可以通过PipelinePrompt来完成。 PipelinePrompt由两部分组成&#xff1a; 最终提示&#xff1a;返回的最终提示&#xff1b;管道提示&#xff1a;元组列表&#xff0c…

eclipse-git项目提示NO-HEAD

1、出现该问题的过程 本人在用eclipse拉取git代码&#xff0c;刚拉取完&#xff0c;可能还没来得及跟本地的分支合并&#xff0c;电脑就卡动了。无奈只能重启电脑&#xff0c;打开eclipse&#xff0c;maven项目后面就出现了xxx NO-HEAD的提示。 2、问题解决 根据错误提示&am…

使用OpenSSL创建CA,并基于CA创建证书

生成CA证书 生成CA证书的私钥 openssl genrsa -out ca.key 4096生成CA证书 openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/CCN/STBeijing/LBeijing/Oexample/OUPersonal/CNMyPersonal Root CA" \-key ca.key \-out ca.crt生成Server证书 证书通常包…

WPF异步UI交互功能的实现方法

前面的文章我们提及过&#xff0c;异步UI的基础实现。基本思路主要是开启新的UI线程&#xff0c;并通过VisualTarget将UI线程上的Visual(即RootVisual)连接到主线程上的UI上即可渲染显示。 但是&#xff0c;之前的实现访问是没有交互能力的&#xff0c;视觉树上的UI并不能实现…

Cross-Site Scripting(XSS)攻击

简介 XSS&#xff08;跨站脚本攻击&#xff09;是一种常见的 Web 安全漏洞&#xff0c;攻击者通过在目标网站的输入框中注入恶意脚本&#xff0c;当其他用户&#xff08;如管理员&#xff09;查看包含恶意脚本的页面时&#xff0c;脚本会在他们的浏览器中执行。XSS 攻击可以分…

linux mount nfs开机自动挂载远程目录

要在Linux系统中实现开机自动挂载NFS共享目录&#xff0c;你需要编辑/etc/fstab文件。以下是具体步骤和示例&#xff1a; 确保你的系统已经安装了NFS客户端。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-install nfs-common 编辑/etc/fstab文件&#…

基于学习的实例匹配方法

文章目录 基于学习的实例匹配方法基于学习的实例匹配方法 大规模知识图谱的实例匹配可视为机器学习的一个二分类问题,因此可以利用知识图谱中丰富的网络结构信息和实例相关的信息来训练一个分类模型,从而实现实例匹配。同时,由于实例的规模较大,在分类之前需要对实例进行分…

uniapp中使用uni-forms实现表单管理,验证表单

前言 uni-forms 是一个用于表单管理的组件。它提供了一种简化和统一的方式来处理表单数据&#xff0c;包括表单验证、字段绑定和提交逻辑等。使用 uni-forms可以方便地创建各种类型的表单&#xff0c;支持数据双向绑定&#xff0c;可以与其他组件及API进行良好的集成。开发者可…

PHP 8.4 重磅发布了

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

android 11添加切换分屏功能

引言 自Android 7开始官方就支持分屏显示,但没有切换分屏的功能,即交换上下屏幕。直到Android 13开始才支持切换分屏,操作方式是:分屏模式下双击中间分割线就会交换上下屏位置。本文的目的就是在Android 11上实现切换分屏的功能。 下图是Android13切换分屏演示 切换分屏…

springboot项目使用maven打包,第三方jar问题

springboot项目使用maven package打包为可执行jar后&#xff0c;第三方jar会被打包进去吗&#xff1f; 答案是肯定的。做了实验如下&#xff1a; 第三方jar的项目结构及jar包结构如下&#xff1a;&#xff08;该第三方jar采用的是maven工程&#xff0c;打包为普通jar&#xf…

从零开始:NetBox 4.1 Docker 部署和升级

前言 由于Netbox 官方的中文语言日渐完善&#xff0c;所以新出一个使用官方Docker源部署和升级的教程。 Netbox 系列文章&#xff1a;https://songxwn.com/categories/NetBox/ 环境介绍 Rocky Linux 9.5 &#xff08;理论上也适用于RHEL系列的7-9版本&#xff09; 南京大学…

Java爬虫:深入探索1688接口的奥秘

在数字化时代&#xff0c;数据成为了企业最宝贵的资产之一。对于电商企业来说&#xff0c;获取和分析数据的能力直接关系到其市场竞争力。阿里巴巴旗下的1688平台&#xff0c;作为中国领先的批发贸易平台&#xff0c;拥有海量的商家和商品信息&#xff0c;成为了众多企业获取数…

13 —— 开发环境调错-source map

问题&#xff1a;代码被压缩后&#xff0c;无法正确定位源代码的位置&#xff08;行数和列数&#xff09; source map&#xff1a;准确追踪error和warning在原始代码的位置 —— webpack.config.js配置devtool选项 module.exports { devtool: inline-source-map }; inline-s…

Flink解决延迟数据问题

总结&#xff1a; 水印&#xff1a;对于迟到数据不长 allowedLateness: 迟到时间很长 侧道输出&#xff1a;对于迟到时间特别长 对于延迟数据的理解&#xff1a; 水印机制(水位线、watermark)机制可以帮助我们在短期延迟下&#xff0c;允许乱序数据的到来。 这个机制很好的…

数据结构(ArrayList顺序表)

一、引言 1.什么是顺序表 定义&#xff1a; 顺序表是一种基于阵列实现的线性表结构&#xff0c;用连续的存储空间保存表中的数据元素&#xff0c;并按顺序排列。 底层依赖阵列&#xff0c;支持随机访问。元素之间没有额外的连接信息&#xff0c;如指针或链表节点。通过动态扩容…

HTTPS的单向认证和双向认证是什么?有什么区别?

目录标题 单向认证流程双向认证流程区别 单向认证流程 HTTPS单向认证‌是指只有服务器向客户端证明其身份。在这种认证方式中&#xff0c;服务器会向客户端发送一个由可信证书颁发机构&#xff08;CA&#xff09;签发的SSL证书&#xff0c;客户端会验证这个证书以确保服务器的…

Python语法基础(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 关键字参数和不定长参数 关键字参数主要体现在函数的调用上 使用关键字参数的好处是&#xff0c;可以不按照形参的参数传参 比如说&#xff0c;我们定义一个函数 def c1(nam…

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术&#xff0c;广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性&#xff0c;通过对当前数据的预测和实际值与预测值之间的差值进行编码&#xff0c;从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

鸿蒙多线程开发——sendable共享容器

1、异步锁机制 在介绍共享容器之前&#xff0c;先介绍异步锁机制。 为了解决多线程并发任务间的数据竞争问题&#xff0c;ArkTS引入了异步锁能力。异步锁可能会被类对象持有&#xff0c;因此为了更方便地在并发实例间获取同一个异步锁对象&#xff0c;AsyncLock对象支持跨线程…