当前位置: 首页 > news >正文

zdppy_validate数据校验工具入门

概述

zdppy_validate 是一款为JSON参数校验打造的工具库,可以和 zdppy_api 框架无缝结合。

另外提供视频课和直播课以及私教课,感兴趣可以加我微信 18010070052 。

必须是字符串类型

from validate import Validatorschema = {'name': {'type': 'string'}}
v = Validator(schema)document = {'name': 'john doe'}
print(v.validate(document))document = {'name': 111}
print(v.validate(document))

整数类型和最小值校验

from validate import Validatorschema = {'name': {'type': 'string'}, 'age': {'type': 'integer', 'min': 10}}
v = Validator(schema)document = {'name': 'Little Joe', 'age': 5}
print(v.validate(document))
print(v.errors)document = {'name': 'Little Joe', 'age': 15}
print(v.validate(document))

不被允许的未知字段

from validate import Validatorschema = {'name': {'type': 'string', 'maxlength': 10}}
v = Validator(schema)document = {'name': 'john', 'sex': 'M'}
print(v.validate(document))
print(v.errors)

设置允许未知字段

from validate import Validatorschema = {'name': {'type': 'string', 'maxlength': 10}}
v = Validator(schema)# 设置允许未知字段
v.allow_unknown = Truedocument = {'name': 'john', 'sex': 'M'}
print(v.validate(document))
print(v.errors)

允许特定类型的字段

from validate import Validatorschema = {'name': {'type': 'string', 'maxlength': 10}}
v = Validator(schema)# 允许整数类型的未知字段
v.allow_unknown = {'type': 'integer'}document = {'name': 'john', 'sex': 'M'}
print(v.validate(document))
print(v.errors)

字典类型的校验

from validate import Validatorschema = {'name': {'type': 'string'},'a_dict': {'type': 'dict','allow_unknown': True,  # 允许未知字段'schema': {  # 字段类型校验'address': {'type': 'string'}}}
}
v = Validator(schema)# 允许
document = {'name': 'john','a_dict': {'an_unknown_field': 'is allowed',}
}
print(v.validate(document))
print(v.errors)# 不允许,因为address必须是字符串类型
document = {'name': 'john','a_dict': {'an_unknown_field': 'is allowed',"address": 123}
}
print(v.validate(document))
print(v.errors)

要求字典所有声明的字段都必填

from validate import Validatorschema = {'name': {'type': 'string'},'a_dict': {'type': 'dict','allow_unknown': True,'require_all': True,  # 要求schema中所有声明的字段都是必填的'schema': {'address': {'type': 'string'}}}
}
v = Validator(schema)document = {'name': 'john','a_dict': {'an_unknown_field': 'is allowed'}
}
print(v.validate(document))
print(v.errors)

给单个字段指定必填

from validate import Validatorschema = {'name': {'type': 'string'},'age': {'type': 'integer', "required": True},
}
v = Validator(schema)document = {'name': 'john',
}
print(v.validate(document))
print(v.errors)

设置列表允许的值

from validate import Validatorschema = {'role': {'type': 'list', 'allowed': ['agent', 'client', 'supplier']}}
v = Validator(schema)document = {'role': ['agent', 'supplier']}
print(v.validate(document))document = {'role': ['agent', 'supplierxx']}
print(v.validate(document))
print(v.errors)

字段依赖

from validate import Validatorschema = {'field1': {'required': False}, 'field2': {'required': False, 'dependencies': 'field1'}}
v = Validator(schema)document = {'field1': 7}
print(v.validate(document))# 正确
document = {'field1': 33, 'field2': 7}
print(v.validate(document))
print(v.errors)# 错误:field2依赖field1
document = {'field2': 7}
print(v.validate(document))
print(v.errors)

值不允许为空

from validate import Validatorschema = {'name': {'type': 'string', 'empty': False}}
v = Validator(schema)document = {'name': 'abc'}
print(v.validate(document))# 错误:不能为空
document = {'name': ''}
print(v.validate(document))
print(v.errors)

字段排除

from validate import Validatorschema = {'this_field': {'type': 'dict','excludes': 'that_field'},'that_field': {'type': 'dict','excludes': 'this_field'}}
v = Validator(schema)document = {'this_field': {}}
print(v.validate(document))
print(v.errors)document = {'that_field': {}}
print(v.validate(document))
print(v.errors)# 错误:this_field不能和that_field同时存在
# 错误:that_field不能和this_field同时存在
document = {'this_field': {}, 'that_field': {}}
print(v.validate(document))
print(v.errors)

设置不能包含值

from validate import Validatorschema = {'user': {'forbidden': ['root', 'admin']}}
v = Validator(schema)# 正确
document = {'user': 'root111'}
print(v.validate(document))
print(v.errors)# 错误 root
document = {'user': 'root'}
print(v.validate(document))
print(v.errors)# 错误 admin
document = {'user': 'admin'}
print(v.validate(document))
print(v.errors)

校验列表元素类型

from validate import Validatorschema = {'list_of_values': {'type': 'list','items': [{'type': 'string'}, {'type': 'integer'}]}
}
v = Validator(schema)# 正确
document = {'list_of_values': ['hello', 100]}
print(v.validate(document))
print(v.errors)# 错误
document = {'list_of_values': [100, 'hello']}
print(v.validate(document))
print(v.errors)

字典key的正则校验

from validate import Validatorschema = {'a_dict': {'type': 'dict','keysrules': {'type': 'string', 'regex': '[a-z]+'}}
}
v = Validator(schema)document = {'a_dict': {'abc': 'value'}}
print(v.validate(document))
print(v.errors)# 错误:不符合正则要求
document = {'a_dict': {'KEY': 'value'}}
print(v.validate(document))
print(v.errors)

字典value的校验

from validate import Validatorschema = {'numbers':{'type': 'dict','valuesrules': {'type': 'integer', 'min': 10}}
}
v = Validator(schema)document = {'numbers': {'an integer': 10, 'another integer': 100}}
print(v.validate(document))
print(v.errors)document = {'numbers': {'an integer': 9}}
print(v.validate(document))
print(v.errors)

最小值和最大值校验

from validate import Validatorschema = {'weight': {'min': 10.1, 'max': 10.9}}
v = Validator(schema)document = {'weight': 12}
print(v.validate(document))
print(v.errors)

最大长度和最小长度校验

from validate import Validatorschema = {'numbers': {'minlength': 1, 'maxlength': 3}}
v = Validator(schema)document = {'numbers': [256, 2048, 23]}
print(v.validate(document))
print(v.errors)document = {'numbers': [256, 2048, 23, 2]}
print(v.validate(document))
print(v.errors)

空值校验

from validate import Validatorschema = {'a_nullable_integer': {'nullable': True, 'type': 'integer'}, 'an_integer': {'type': 'integer'}}
v = Validator(schema)# 正确:不填是可以的
document = {'a_nullable_integer': 3}
print(v.validate(document))
print(v.errors)# 错误:不允许空值
document = {'an_integer': None}
print(v.validate(document))
print(v.errors)

多个校验或关系

from validate import Validatorschema = {'prop1':{'type': 'number','anyof': [{'min': 0, 'max': 10}, {'min': 100, 'max': 110}]}
}
v = Validator(schema)document = {'prop1': 5}
print(v.validate(document))
print(v.errors)document = {'prop1': 55}
print(v.validate(document))
print(v.errors)

字符串正则校验

from validate import Validatorschema = {'email': {'type': 'string','regex': '^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'}
}
v = Validator(schema)document = {'email': 'john@example.com'}
print(v.validate(document))
print(v.errors)document = {'email': 'john_at_example_dot_com'}
print(v.validate(document))
print(v.errors)

默认值

from validate import Validatorschema = {'amount': {'type': 'integer'}, 'kind': {'type': 'string', 'default': 'purchase'}}
v = Validator(schema)document = {'amount': 1, 'kind': None}
print(v.validate(document))
print(v.normalized(document))
print(v.errors)document = {'amount': 1, 'kind': 'other'}
print(v.validate(document))
print(v.normalized(document))
print(v.errors)

相关文章:

  • k8s集群安装后CoreDNS 启动报错plugin/forward: no nameservers found
  • c++读取文本文件出现乱码问题
  • 2024.05.24|生信早报【AI测试版】
  • 2. C++服务器编程-信号
  • MobaXterm使用私钥远程登陆linux
  • 分布式中traceId链接服务间的日志
  • 短剧系统源码解析与应用
  • 详细分析Vue3中的emit用法(子传父)
  • Java-常见面试题收集(十六)
  • 2024年顶级算法-黑翅鸢优化算法(BKA)-详细原理(附matlab代码)
  • Python基础知识归纳总结
  • 2024 电工杯高校数学建模竞赛(B题)| 平衡膳食食谱 |建模秘籍文章代码思路大全
  • Mac下QT开发环境搭建详细教程
  • 计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)
  • <MySQL> 【数据类型】
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2019年如何成为全栈工程师?
  • Android框架之Volley
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Invalidate和postInvalidate的区别
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java IO学习笔记一
  • Java基本数据类型之Number
  • Objective-C 中关联引用的概念
  • PHP面试之三:MySQL数据库
  • Puppeteer:浏览器控制器
  • python3 使用 asyncio 代替线程
  • Solarized Scheme
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 诡异!React stopPropagation失灵
  • 什么软件可以剪辑音乐?
  • 原生js练习题---第五课
  • No resource identifier found for attribute,RxJava之zip操作符
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​flutter 代码混淆
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #大学#套接字
  • (02)Unity使用在线AI大模型(调用Python)
  • (1) caustics\
  • (2)STM32单片机上位机
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (MATLAB)第五章-矩阵运算
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (九十四)函数和二维数组
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (自用)仿写程序
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .gitignore文件忽略的内容不生效问题解决