首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cerberus中自定义类型的验证

Cerberus中自定义类型的验证
EN

Stack Overflow用户
提问于 2018-05-09 16:39:13
回答 1查看 989关注 0票数 3

我真的很喜欢Cerberus,但我在文档里找不到一个简单的案例。我想要fudge类型,它是一个带有~前缀的字符串。我简直想不出怎么做..。

代码语言:javascript
复制
fudge_type = cerberus.TypeDefinition('fudge_type', (str,), ())

class MyValidator(cerberus.Validator):
    types_mapping = cerberus.Validator.types_mapping.copy()
    types_mapping['fudge'] = fudge_type

    def __init__(self, *args, **kwargs):
        if 'additional_context' in kwargs:
            self.additional_context = kwargs['additional_context']
        super(MyValidator, self).__init__(*args, **kwargs)

    @property
    def additional_context(self):
        self._error(field, "INVALID!")
        return self._config.get('additional_context', 'bar')

    def _validate_type_fudge(self, field, value):
        self._error(field, "INVALID!")
        make_use_of(self.additional_context)

validator = MyValidator()
validator.validate({'name': 'yada'}, {'name': {'type': 'fudge'}})  # => True

这似乎是个简单的案子..。所以我觉得我做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 10:49:05

在Cerberus 1.2中,您可以实现如下所示:

代码语言:javascript
复制
import cerberus

SCHEMA = {
    'fudge': {
        'type': 'mytype'
    }
}

class MyValidator(cerberus.Validator):
    def _validate_type_mytype(self, value):
        if value.startswith('~'):
            return True

validator = MyValidator()
validator.validate({'fudge': 'yada'}, SCHEMA)

因此,不需要使用TypeDefinition进行黑客攻击。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50258249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档