python第三方库推荐 - 优雅的数据验证库schema
jopen
10年前
这个在验证表单、配置、客户端传过来的数据等很有用。
安装
easy_install schema 或 pip install schema
基本用法
from schema import SchemaSchema(xxx).validate(data)
其中参数xxx可以是:
- 基本数据类型比如int/float/list/tuple/set/str等。
- 函数
- list, tuple, set, frozenset, dict实例
- 某个重写了validate方法的类。比如Use。
如果验证通过,会返回验证通过的数据。
如果验证不通过,会抛出SchemaError异常。
示例
基本类型>>Schema(int).validate(123)
函数
>>Schema(os.path.exists).validate('/path/to/file')
先转换再验证
>>from schema import Use
>>Schema(Use(int)).validate('123')
如果Schema的参数是一个容器,list, tuple, set or frozenset,那么待验证的数据也必须是个对应的容器,且容器元素在枚举内。
>>Schema([1, 0]).validate([1, 1, 0, 1])
>>Schema((int, float)).validate((5, 7, 8, 'not int or float here'))
可以对字典的key和value验证
>>Schema({'name': str, 'age': lambda n: 18 < 99}).validate({'name': 'Sue', 'age': 28})
>>Schema({str: int, # 代表字符串的key的value类型必须是整型
int: None}) #整型的key的value必须是None
如果只想对部分键值验证,而不管其它的,可以用object。
>>Schema({'id': int,str: object}).validate({'id':10,'age':2,'name':'Rooney'})
可选、与、或
>>from schema import Optional,And, Or
>>Schema({'name': str, Optional('occupation'): str}).validate({'name': 'Sam'})
>>Schema({'age': And(int, lambda n: 0 < n < 99)}).validate({'age': 7})
>>Schema(And(Or(int, float), lambda x: x > 0)).validate(3.1415)
项目地址