参数校验
import schema
# 检查数字
print '----------------------int'
print schema.Schema(int).validate(123)
print schema.Schema(int).is_valid(123)
# 检查字符串
print '----------------------str'
# Regex 没有 is_valid 方法
print schema.Regex(r'^foo').validate('foobar')
print schema.Schema(lambda n: "foo" in n).is_valid('foobar')
print 'False:%s ' % schema.Schema(lambda n: "foo" in n).is_valid('fobar')
# 检查字典
print '----------------------dict'
rules = {
'name': schema.And(str, len),
'age': schema.And(schema.Use(int), lambda n: 18 <= n <= 99),
schema.Optional('gender'): schema.And(str, schema.Use(str.lower),lambda s: s in ('squid', 'kid'))}
data = {'name': 'Sue', 'age': '28', 'gender': 'Squid'}
print schema.Schema(rules).validate(data)
print schema.Schema(rules).is_valid(data)
print '----------------------list-dict'
rules = [{
'name': schema.And(str, len),
'age': schema.And(schema.Use(int), lambda n: 18 <= n <= 99),
schema.Optional('gender'): schema.And(str, schema.Use(str.lower),lambda s: s in ('squid', 'kid'))}]
data = [{'name': 'Sue', 'age': '28', 'gender': 'Squid'},
{'name': 'Sam', 'age': '42'},
{'name': 'Sacha', 'age': '20', 'gender': 'KID'}]
print schema.Schema(rules).validate(data)
print schema.Schema(rules).is_valid(data)
- https://github.com/keleshev/schema
- 将原项目中的 schema.py 重命名为
schema/__init__.py
from schema import Optional, Schema
Schema({'name': str, Optional('age'): int}).validate({'name': 'foobar'})
{'name': 'foobar'}
Schema({'name': str, Optional('age', default=18): int}).validate({'name': 'foobar'})
{'age': 18, 'name': 'foobar'}
Schema({'name': str, 'age': int}, ignore_extra_keys=True).validate({'name': 'foobar', 'age': 100, 'sex': 'male'})
{'age': 100, 'name': 'foobar'}
Schema 自带的类(Use、And、Or、Regex、Schema 等)都有一个参数 error,可以自定义错误信息
Schema({'name': str, 'age': Use(int, error='年龄必须是整数')}).validate({'name': 'foobar', 'age': 'abc'})
SchemaError: 年龄必须是整数
如
{
schema.Optional('region'): schema.And(lambda n: n in ["bj", "gz"], error="region mast in bj/gz"),
}