Marshmallow @validates не вызывает ошибку

все. Я пишу проект API, используя Flask в качестве основного фреймворка и пакет Marshmallow для сериализации данных JSON. Я хочу создать экземпляр игрока, но перед созданием подтвердите его никнейм. Вид:

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!!!')

person Oleksii Petrushynskyi    schedule 07.09.2018    source источник


Ответы (1)


Это связано с тем, что по умолчанию в marshmallow 2 схемы не вызываются при ошибке.

Вам нужно передать strict мета аргумент:

class PlayerSchema(Schema):

    nickname = fields.Str(required=True)

    class Meta:
        strict = True

В marshmallow 3 схемы всегда возникают при ошибке.

person Jérôme    schedule 18.10.2018