每日一模块:voluptuous

一、简介

voluptuous是一个Python数据验证库,它允许你定义复杂的数据结构验证规则,并使用这些规则来验证数据。voluptuous非常适合用于配置文件验证、API输入验证等场景。它提供了丰富的验证器和类型,支持嵌套数据结构的验证,并且允许你自定义验证函数。

二、安装

使用pip安装voluptuous:

pip install voluptuous

基本使用

3.1 导入voluptuous

首先,你需要导入voluptuous模块:

from voluptuous import Schema, Invalid, Required, All, Any, Range

3.2 定义模式

使用voluptuous的Schema类来定义验证模式。你可以使用内置的验证器(如strintbool等)或者自定义的验证器来定义字段的验证规则。

示例:简单模式

schema = Schema({
    Required('name'): str,
    'age': All(int, Range(min=0max=150)),
})

在这个例子中,我们定义了一个模式,它要求一个包含nameage字段的字典。name字段是必需的,并且必须是字符串类型;age字段是可选的,它必须是整数类型,并且值在0到150之间。

示例:嵌套模式

schema = Schema({
    'person': {
        Required('name'): str,
        'age': All(int, Range(min=0max=150)),
        'address': {
            'street'str,
            'city'str,
        },
    },
    'hobbies': All(list, [str]),
})

在这个例子中,我们定义了一个更复杂的模式,它包含一个嵌套的person字段和一个hobbies列表。person字段本身是一个字典,包含nameageaddress字段。hobbies字段是一个字符串列表。

3.3 验证数据

使用定义好的模式来验证数据。如果数据不符合模式,voluptuous会抛出一个Invalid异常。

data = {
    'person': {
        'name''beiJin',
        'age'30,
        'address': {
            'street''123 Main St',
            'city''Anytown',
        },
    },
    'hobbies': ['reading''coding'],
}

try:
    schema(data)  # 如果数据符合模式,这行代码将不会抛出异常
    print("Data is valid")
except Invalid as e:
    print("Data is invalid:", e)

四、voluptuous的验证器

voluptuous提供了许多内置的验证器,以下是一些常用的验证器示例:

4.1 字段类型

  • • str:字符串类型

  • • int:整数类型

  • • float:浮点数类型

  • • bool:布尔类型

  • • 'email':电子邮件地址类型(使用内置的 email 验证器)

  • • 'url':URL 类型(使用内置的 URL 验证器)

4.2 复杂类型

  • • List(subtype):列表类型,subtype 指定列表中元素的类型

  • • Dict(mapping):字典类型,mapping 是一个字典,其键是字段名,值是字段的验证规则

4.3 修饰符

  • • Required(...):指定字段是必需的

  • • Optional(...):指定字段是可选的(默认所有字段都是可选的)

  • • All(*validators):组合多个验证器,数据必须依次通过所有验证器

  • • Any(*validators):数据只需通过其中一个验证器即可

  • • Coerce(type, conversion_func=None):尝试将数据类型转换为指定的类型,如果转换失败则抛出 Invalid 异常

  • • Length(min=None, max=None, exact=None):验证字符串、列表、元组等的长度

  • • Range(min=None, max=None):验证数字是否在指定范围内

  • • Match(pattern):验证字符串是否与正则表达式匹配

4.4 自定义验证器

你可以定义自己的验证函数,并将其作为验证器使用。

def is_positive(value):
    if value <= 0:
        raise Invalid('Value must be positive')
    return value

schema = Schema({
    'amount': is_positive
})


# 验证
data = {"amount"1}
try:
    r = schema(data)
except Invalid as e:
    print(e)
else:
    print(r)

五、总结

voluptuous 是一个功能强大的 Python 数据验证库,它提供了灵活和可扩展的方式来定义和验证复杂的数据结构。如果你正在寻找一个用于验证配置文件、API 输入或其他数据源的工具,voluptuous 是一个值得考虑的选择。

另外几个数据验证库:

每日一模块:Schematics

Python_学习之模块jsonSchema

每日一模块:Cerberus

原文始发于微信公众号(Python小白养成记):每日一模块:voluptuous

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/289175.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!