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)

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值