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 中,模式总是在出错时引发。