Marshmallow @validates 不会引发错误
Marshmallow @validates does not raise error
全部。我使用 Flask 作为主要框架和用于序列化 JSON 数据的 Marshmallow 包编写 API 项目。
我想创建播放器实例,但在创建之前验证他的昵称。
查看:
def create_player()
...
try:
data = player_schema.load(request_data)
# when error raised excect case does not handle it
# but data has 2 dicts:
# UnmarshalResult(data={}, errors={'nickname': ['Error!!!']})
except ValidationError as err:
return jsonify(err.messages), 400
...
架构:
class PlayerSchema(Schema):
nickname = fields.Str(required=True)
...
@validates('nickname')
def validate_nickname(self, value):
raise ValidationError('Error!!!')
这是因为默认情况下,在 marshmallow 2 中,模式不会在出错时引发。
您需要传递 strict
元参数:
class PlayerSchema(Schema):
nickname = fields.Str(required=True)
class Meta:
strict = True
在 marshmallow 3 中,模式总是在出错时引发。
全部。我使用 Flask 作为主要框架和用于序列化 JSON 数据的 Marshmallow 包编写 API 项目。 我想创建播放器实例,但在创建之前验证他的昵称。 查看:
def create_player()
...
try:
data = player_schema.load(request_data)
# when error raised excect case does not handle it
# but data has 2 dicts:
# UnmarshalResult(data={}, errors={'nickname': ['Error!!!']})
except ValidationError as err:
return jsonify(err.messages), 400
...
架构:
class PlayerSchema(Schema):
nickname = fields.Str(required=True)
...
@validates('nickname')
def validate_nickname(self, value):
raise ValidationError('Error!!!')
这是因为默认情况下,在 marshmallow 2 中,模式不会在出错时引发。
您需要传递 strict
元参数:
class PlayerSchema(Schema):
nickname = fields.Str(required=True)
class Meta:
strict = True
在 marshmallow 3 中,模式总是在出错时引发。