顶级棉花糖模式验证
top-level marshmallow schema validation
从 Marshmallow#validation 开始,我知道我可以在架构中的特定字段上注册验证器。如果验证器失败,错误在 :
data, errors = MySchema().load({"some":"data})
将包含验证器失败的任何字段的错误信息:
errors
# => some error message for the field that failed
我的问题:是否可以在架构级别(而不是在单个字段级别)进行验证,但仍然 return 上述方式中的错误?
作为任意示例,假设我想验证您是否尝试 MySchema().load()
n 个不同的键。
我目前有一个 @pre_load
方法来检查输入的结构和 raise ValidationError('message')
如果数据格式错误,但我想 return 它像 result.errors 字段验证确实如此。我有哪些选择?
您可以使用 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
从 Marshmallow#validation 开始,我知道我可以在架构中的特定字段上注册验证器。如果验证器失败,错误在 :
data, errors = MySchema().load({"some":"data})
将包含验证器失败的任何字段的错误信息:
errors
# => some error message for the field that failed
我的问题:是否可以在架构级别(而不是在单个字段级别)进行验证,但仍然 return 上述方式中的错误?
作为任意示例,假设我想验证您是否尝试 MySchema().load()
n 个不同的键。
我目前有一个 @pre_load
方法来检查输入的结构和 raise ValidationError('message')
如果数据格式错误,但我想 return 它像 result.errors 字段验证确实如此。我有哪些选择?
您可以使用 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