在 Cerberus 中验证自定义类型

标签 validation cerberus

我真的很喜欢 Cerberus,但我无法在文档中找到一个简单的案例。我想要 fudge 类型,它是一个带有 ~ 前缀的字符串。我根本不知道该怎么做..

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

这似乎是一个简单的案例..所以感觉我做的事情完全错了。

最佳答案

在 Cerberus 1.2 中,您可以像下面这样实现:

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

关于在 Cerberus 中验证自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50258249/

相关文章:

ruby-on-rails - Rails 5 仅当属性当前为 nil 时才更新属性

jquery - 如何使用 Bootstrap 验证器来验证文件大小和文件类型

mongodb - python 夏娃。在 Cerberus 模式上声明一个对象 ID 数组

python - 嵌套字典字段中的前夕 0.8 `allow_unknown`

validation - 允许模式中未知键但已验证值

python - Cerberus 依赖项如何引用文档中较高的字段?

asp.net-mvc-3 - 复杂的验证场景

ios - 如何验证多维 NSArray 结构?

ruby-on-rails-3 - 如何限制 rails 中模型的嵌套属性数