瑟伯鲁斯:禁止野外生存

2024-05-13 03:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Cerberus来验证对象中是否存在字段。你知道吗

我想用这样的方法:

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

基本上,我不想接受随forbidden_field而来的对象。现在我接受通过以下方式更改我的验证器:

validator.allow_unknown = False

这基本上就是用“允许”字段设置模式的诀窍,但我并不喜欢它的功能,因为它禁止我接受其他字段,而不仅仅是forbidden_field。你知道吗

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

那么,我怎么能告诉我的验证器只禁止特定领域的存在与Cerberus?你知道吗


Tags: 对象方法truefieldstringschemamytype
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))

结果应该返回Falsev.errors应该说“字段被禁止!!”你知道吗

请参见:

我用^{}规则解决了这个问题,该规则还允许我设置default_setter值。你知道吗

@kchan的答案适用于不允许字段,但它破坏了规范化集成(例如尝试将其与default_setter一起使用)。你知道吗

相关问题 更多 >