[英]top-level marshmallow schema validation
从Marshmallow#validation ,我知道我可以在Schema中的特定字段上注册验证器。 如果验证器失败,则出现以下错误:
data, errors = MySchema().load({"some":"data})
将包含验证器失败的任何字段的错误信息:
errors
# => some error message for the field that failed
我的问题:是否有可能在Schema级别(而不是在单个字段级别)进行验证,并仍然以上述方式返回错误?
作为一个任意的例子,假设我想验证你试图使用MySchema().load()
n不同的密钥。 我目前有一个@pre_load
方法,它检查输入的结构并在数据格式raise ValidationError('message')
,但我想将其作为结果返回。像字段验证那样的错误。 我有什么选择?
您可以使用validates_schema装饰器在整个对象上运行验证:
class MySchema(marshmallow.Schema):
# ...
@marshmallow.validates_schema(skip_on_field_errors=True)
def validate_object(self, data):
if data['foo'] < data['bar']:
raise marshmallow.ValidationError(
'Value should not be less than bar',
['foo'] # name of field to report error for
)
虽然如果您想独立报告不同字段的多个错误,但Marshmallow此时不支持报告不同字段的多个不同错误,您需要将单独的验证放入单独的方法中:
class MySchema(Schema):
# ...
@validates_schema
def validate_foo(self, data):
pass
@validates_schema(skip_on_field_errors=True)
def validate_bar(self, data):
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.