python cerberus Validator参数校验

最简单用法

# 最简单用法
from cerberus import Validator
schema = {'name1': {'type': 'string'}, 'name2': {'type': 'string'}}
v = Validator(schema)

document = {'name1': 'john doe', 'name2': 0}

if v.validate(document):
    print('data is valid')
else:
    print(v.errors)

输出:

{'name2': ['must be of string type']}

自定义校验方法代码示例: 

# coding=utf-8
from cerberus import Validator


class ParamValidator(Validator):

    def __init__(self, *args, **kwargs):
        self.res = {}
        super(ParamValidator, self).__init__(*args, **kwargs)

    def _validator_username(self, field, value):
        print(" --- in _validator_username ---")
        print("field = {}, value = {}".format(field, value))
        name = value.get('username', None)
        print("name = {}".format(name))
        if not name:
            return self._error('error_info', 'not username')

    def _check_with_gender(self, field, value):
        print("--- in _check_with_gender ---")
        print("field = {} | value = {}".format(field, value))
        self.res.update({"field": field, "value": value})


if __name__ == "__main__":
    # No.1 自定义前缀为:_validator_<validator_name>的校验方法
    document = {'data': {'username': ''}}
    # schema_rule中validator对应的值为username,会自动去找_validator前缀的_validator_username方法
    schema_rule = {"data": {'validator': 'username'}}
    pv = ParamValidator(schema_rule)
    if not pv.validate(document):
        print("pv.document = {}".format(pv.document))
        print("pv.errors = {}".format(pv.errors))
    else:
        print("validator success end ---")

    print('='*20 + '分割线' + '='*20)

    # No.2 - 自定义前缀为_check_with<field>的校验方法
    document = {'name': "1", 'age': 3, 'gender': 'male-'}
    # schema_rule中gender对应的值中check_with字段对应的值为gengder,会自动去找_check_with前缀的_check_with_gender方法执行
    schema_rule = {
        'name': {'type': 'string'},
        'age': {'default': 18, 'type': 'integer'},
        'gender': {'type': "string", "allowed": ["male", "female"], "check_with": "gender"}
    }

    pv = ParamValidator(schema_rule)
    res = pv.validate(document)
    print("res = {}".format(res))
    print("pv.document = {}".format(pv.document))
    print("pv.errors = {}".format(pv.errors))
    print("pv.res = {}".format(pv.res))

输出:

 --- in _validator_username ---
field = data, value = {'username': ''}
name = 
pv.document = {'data': {'username': ''}}
pv.errors = {'error_info': ['not username']}
====================分割线====================
--- in _check_with_gender ---
field = gender | value = male-
res = False
pv.document = {'gender': 'male-', 'age': 3, 'name': '1'}
pv.errors = {'gender': ['unallowed value male-']}
pv.res = {'field': 'gender', 'value': 'male-'}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值