Python数据验证库schema
目录
一、简述
二、安装schema库
三、使用
基本概念
代码示例
简单使用
列表验证
正则表达式
一、简述
schema用于简化数据验证的过程。它提供了一种简单的方式来定义数据结构,并验证传入的数据是否符合预期的结构。schema
库非常适合用于 Web 应用的请求验证、配置文件解析以及其他需要数据验证的场景。
二、安装schema库
pip install schema
三、使用
基本概念
- Schema: 定义验证规则的对象。
- And: 用于组合多个验证器,要求所有验证器都通过。
- Or: 用于组合多个验证器,只要其中一个验证器通过即可。
- Use: 将验证后的数据转换为其他形式。
- Optional: 定义可选字段。
- Regex: 使用正则表达式验证字符串。
- SchemaError: 验证失败时抛出的异常。
代码示例
简单使用
from schema import Schema, And, Optional, SchemaError# 验证数据
data = {'name': 'Alice','age': 30,'email': 'ALICE@EXAMPLE.COM','phone': '13578965478','aaa': 144,'info': {'addr': 'BeiJing','card': '12312313123131231322X'}
}# 定义规则
schema_params = {"name": And(str, len),"age": And(int, lambda a: 0 <= a <= 150, error="年龄不为数字,或年龄大于0小于150"),"email": And(str),Optional("phone"): And(str, lambda p: len(p) == 11, error="手机号格式错误"),'info': {'addr': And(len, error='每个人不能没有家住址'),'card': And(len, error='每个人都得有身份证')}
}# 设置 ignore_extra_keys=True 时,如果传入的数据包含不在验证模式中的额外键,这些键将被忽略,而不会引发错误。
rule_schema = Schema(schema_params, ignore_extra_keys=True)
try:rule_schema.validate(data)
except SchemaError as e:print(e)
列表验证
from schema import Schema, And, Use# 定义验证规则
schema = Schema({'users': [{'name': str,'age': And(int, lambda n: 0 <= n <= 120)}]
})# 验证数据
data = {'users': [{'name': 'Alice', 'age': 30},{'name': 'Bob', 'age': 25}]
}try:validated_data = schema.validate(data)print("Validated data:", validated_data)
except SchemaError as e:print("Validation error:", e)
正则表达式
from schema import Schema, Regex# 定义验证规则
schema = Schema({'email': Regex(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')
})# 验证数据
data = {'email': 'alice@example.com'
}try:validated_data = schema.validate(data)print("Validated data:", validated_data)
except SchemaError as e:print("Validation error:", e)