首页 > 其他分享 >pydantic的validator如何验证多个字段

pydantic的validator如何验证多个字段

时间:2023-10-09 14:57:00浏览次数:32  
标签:验证 sum item 字段 validator pydantic

pydantic是一个数据验证和设置管理的Python库。当您需要根据多个字段的值来验证其中一个字段的值时,您可以使用@validator装饰器并设置preeach_item参数以及fields参数来指定依赖的字段。

以下是一个简单的示例,展示如何使用pydanticvalidator来验证多个字段:

from pydantic import BaseModel, validator, ValidationError

class Item(BaseModel):
    a: int
    b: int
    sum: int

    @validator('sum', pre=True, whole=True)
    def check_sum(cls, sum, values):
        a = values.get('a')
        b = values.get('b')
        if a is None or b is None:
            raise ValueError('Both "a" and "b" must be provided before "sum"')
        if sum != a + b:
            raise ValueError(f'sum should be equal to the sum of "a" and "b", got {a+b}')
        return sum

# Test
try:
    item = Item(a=1, b=1, sum=3)  # This will raise a validation error
except ValidationError as e:
    print(e)

item = Item(a=1, b=1, sum=2)  # This will be fine
print(item)

在上述示例中,我们定义了一个Item模型,其中有三个字段:absum。我们使用@validator装饰器来验证sum字段,确保它的值是ab的总和。我们通过values参数来获取其他字段的值。

这种方法允许您在验证一个字段时考虑其他字段的值。

标签:验证,sum,item,字段,validator,pydantic
From: https://www.cnblogs.com/JentZhang/p/17751713.html

相关文章

  • 全场景流量验证系统 | 京东物流技术团队
    本文介绍了一种基于线上流量实现对重构系统进行功能和性能验证的实践方案。针对线上流量如何拦截、如何录制、如何存储、如何回放以及如何发压均作了详细说明,为具有类似需求的读者提供了一种可供参考的思路。1业务背景随着百川项目的启动,中台需要对订单流量收口,将ECLP、各BP的接单......
  • LeetCode 125 验证回文串
    LeetCode125验证回文串1.题目地址https://leetcode.cn/problems/valid-palindrome/?envType=study-plan-v2&envId=top-interview-1502.题解这道题比较简单,思路如下:1.对源字符串进行处理,过滤掉非字母数字字符。这里需要注意:我们要将大写字母统一转换成小......
  • 全场景流量验证系统
    本文介绍了一种基于线上流量实现对重构系统进行功能和性能验证的实践方案。针对线上流量如何拦截、如何录制、如何存储、如何回放以及如何发压均作了详细说明,为具有类似需求的读者提供了一种可供参考的思路。1业务背景随着百川项目的启动,中台需要对订单流量收口,将ECLP、各BP的......
  • angular使用from动态设置验证器(clearValidators、setValidators)
    原文链接:https://www.longkui.site/program/frontend/angularfrom/4787/0.背景调试一个angular的form表单,根据条件动态赋予表单的权限验证。主要介绍clearValidators和setValidators的用法。1.代码初始化代码:1234567891011121314151617181920212......
  • 记一次Smanga 身份验证绕过漏洞挖掘(CVE-2023-36079)
    记录一次本人CVE漏洞挖掘的过程,此漏洞已被分配编号:CVE-2023-36079引言本文介绍了一次针对某开源项目的身份验证绕过漏洞,此开源项目是一个流媒体管理平台。代码审计审计代码发现功能接口点使用check_user_power()函数进行权限校验。跟踪该函数,发现没有使用常规的JWT或者自......
  • 高效数据管理:Java助力实现Excel数据验证
    摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言在Java中,开发者可以使用一些开源的库(如ApachePOI)来添加、修改和处理Excel中的数据:包括数字、文本、日期、列表等。每种数据验证类型都具有不......
  • LeetCode——98. 验证二叉搜索树
    98.验证二叉搜索树本次博客,我将记录验证二叉搜索树由于二叉搜索树的性质是每个节点的左子树中的全部节点数据小于它,而右子树中的全部节点的数据都大于它,因此可以通过这条性质来进行判断刚上手的时候直接就做了,没考虑到局部最优而非全局最优的情况,遇到这种测试用例直接寄了:是......
  • 【实用】登录图形认证 图形码 验证码 中文图形验证码 动态图形验证码 图片验证码 验证
    后端测试: 主要code:https://www.cnblogs.com/liuguiqing/p/17722366.html ......
  • 关于训练集、验证集、测试集的理解
    我们在一般深度学习的实验中,经常使用到的是训练集和测试集。训练集自不必说,是用来训练网络参数的,如网络权重W,b。要进行区分的是验证集和测试集。验证集的作用是用来调整超参数,如网络层数、学习率等等。而测试集是用来测试你所训练的网络(包括网络参数和超参数)的效果。之所以不能用......
  • 实现基于MYSQL验证的vsftpd虚拟用户访问
     #利用pam_mysql模块可以实现基于MySQL的FTP虚拟用户功能#项目网站:http://pam-mysql.sourceforge.net/#说明:因为此项目年代久远不再更新,当前只支持CentOS6,7,不支持CentOS8环境准备:本实验在两台主机上实现一台作为FTP服务器centos7一台作为mariadb......