4

我想使用 Cerberus 来验证对象中存在字段。

我想使用类似的东西:

my_schema = {
    'normal_field': {
        'type': 'string',
    },
    'forbidden_field': {
        'forbid': True,
    },
}

基本上,我永远不会接受forbidden_field. 现在我接受更改我的验证器:

validator.allow_unknown = False

这基本上可以解决仅使用“允许”字段设置架构的技巧,但我真的不喜欢它的功能,因为这禁止我接受其他字段,而不仅仅是forbidden_field.

我也看到了allowedforbidden验证规则,但是它们检查的是字段的值,而不是字段的存在。

那么,我怎么能告诉我的验证器只禁止 Cerberus 的特定字段存在呢?

4

2 回答 2

2

我似乎记得以前遇到过这个特殊的用例。您可以尝试以下方法:

from cerberus import Validator

schema = {
    'foo': {
        'type': 'string',
        'validator': lambda field, value, error: error(field, 'field is forbidden!!'),
    }
}
v = Validator(schema)
v.allow_unknown = True
doc = {
    'foo': 'bar'
}
print(v.validate(doc))

结果应该返回False并且v.errors应该说“字段被禁止!!”

看:

于 2019-04-15T04:24:39.747 回答
1

我用规则解决了这个问题,该readonly规则也允许我设置一个default_setter值。

@kchan 的答案适用于不允许该字段,但它破坏了规范化集成(default_setter例如尝试使用它)。

于 2019-04-15T22:34:03.133 回答