可验证数据是否符合指定的模式,并且提供了自定义规则的功能,常见使用。
pip install cerberus
from cerberus import Validator
# 定义验证规则
schema = {
'name': {
'type': 'string',
'minlength': 3,
'maxlength': 20,
'required': True,
},
'age': {
'type': 'integer',
'min': 0,
'max': 120,
'required': True
},
'email': {
'type': 'string',
'regex': r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$',
}
}
# 创建验证器对象
validator = Validator(schema, allow_unknown=True) # allow_unknown,未知字段不验证
# 模拟数据
data = {
'name': 'John Doe',
'age': 150,
'email': '[email protected]',
'test': '123'
}
# 开始验证数据
if validator.validate(data):
print("数据验证成功!")
else:
print("数据验证失败 errors:")
print(validator.errors) # {'age': ['max value is 120']}
for field, errors in validator.errors.items():
print(f"Field '{field}': {', '.join(errors)}")
schema = {
'person': {
'type': 'dict',
'schema': {
'name': {'type': 'string', 'required': True},
'age': {'type': 'integer', 'required': True},
},
'required': True,
},
}
validator = Validator()
data = {
'person': {
'name': 'John Doe',
'age': 30,
},
}
if validator.validate(data, schema):
print("数据验证成功!")
else:
print("数据验证失败 errors:")
print(validator.errors)
def custom_validation(field, value, error):
if len(value) < 5:
error(field, "最少5个字符: %s " % len(value))
schema = {
'password': {'type': 'string', 'validator': custom_validation},
}
validator = Validator(schema)
data = {
'password': '1234'
}
if validator.validate(data):
print("数据验证成功!")
else:
print("数据验证失败 errors:")
print(validator.errors)
schema = {
'list_key': {
'type': 'list',
'schema': {
'type': 'dict',
'schema': {
'name':
{
'type': 'string',
'required': True,
'empty': False
},
'relationship': {
'type': 'string',
'required': True,
'empty': False
}
}
}
}
}
data = {"list_key": [{'name': 'Mary', 'relationship': 'sister'}, {'name': 'Tom', 'relationship': 'brother-in-law'}]}
validator = Validator(schema)
if validator.validate(data):
print("数据验证成功!")
else:
print("数据验证失败 errors:")
print(validator.errors)