Validation Cerberus中自定义类型的验证
我真的很喜欢Cerberus,但我在文档中找不出一个简单的例子。我想输入Validation Cerberus中自定义类型的验证,validation,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['fu
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)
因此无需使用
类型定义
进行修改,因此在1.2中,您必须在调用validate时通过SCEMA?因为我正在尝试为tuple
值创建自定义类型。但是它在访问\u validate\u type\u tuple
方法时会出现运行时错误,该方法不存在(即使我将其添加到自定义类中)。