Я хочу использовать Cerberus для проверки того, что поле НЕТ присутствует в объекте.
Я хотел бы использовать что-то вроде:
my_schema = {
'normal_field': {
'type': 'string',
},
'forbidden_field': {
'forbid': True,
},
}
По сути, я бы никогда не хотел принимать объект, который идет с forbidden_field. Прямо сейчас я принимаю изменение моего валидатора с помощью:
validator.allow_unknown = False
Что в основном помогает настроить схему только с «разрешенными» полями, но мне не очень нравится то, что она делает, так как это запрещает мне принимать другие поля, а не только forbidden_field.
Я также видел правила проверки allowed и forbidden, но они проверяют значение поля, а не его существование.
Итак, как я могу сказать своему валидатору запретить существование определенного поля только с Cerberus?






Кажется, я припоминаю, что уже сталкивался с этим конкретным вариантом использования. Вы можете попробовать следующее:
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 должно сказать «поле запрещено!!»
видеть: