一、简介
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
类来定义验证模式。你可以使用内置的验证器(如str
、int
、bool
等)或者自定义的验证器来定义字段的验证规则。
示例:简单模式
schema = Schema({
Required('name'): str,
'age': All(int, Range(min=0, max=150)),
})
在这个例子中,我们定义了一个模式,它要求一个包含name
和age
字段的字典。name
字段是必需的,并且必须是字符串类型;age
字段是可选的,它必须是整数类型,并且值在0到150之间。
示例:嵌套模式
schema = Schema({
'person': {
Required('name'): str,
'age': All(int, Range(min=0, max=150)),
'address': {
'street': str,
'city': str,
},
},
'hobbies': All(list, [str]),
})
在这个例子中,我们定义了一个更复杂的模式,它包含一个嵌套的person
字段和一个hobbies
列表。person
字段本身是一个字典,包含name
、age
和address
字段。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 是一个值得考虑的选择。
另外几个数据验证库:
原文始发于微信公众号(Python小白养成记):每日一模块:voluptuous
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/289175.html