目录
一、简述
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)