python第三方库推荐 - 优雅的数据验证库schema

jopen 10年前

这个在验证表单、配置、客户端传过来的数据等很有用。

安装

easy_install schema 或 pip install schema

 

基本用法

from schema import Schema
Schema(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)

 

项目地址