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)