Функция jsonify в Flask несовместима с flask-marshmallow

Я разрабатываю API с использованием flask-RESTful, и у меня возникла проблема с функцией jsonify во Flask. Я использую flask-marshmallow для сериализации JSON. Ниже представлен очень упрощенный фрагмент кода:

result = activities_schema.dump(activities)
return jsonify(result)

Локально конечная точка вернет json с ключами data и errors; однако при запуске на сервере Linux это возвращает результат, содержащий список и dict без ключей «данные» и «ошибки».

Я определил, что это несоответствие вызвано функцией jsonify Flask, распечатывающей результаты до того, как они будут возвращены API. И локально, и на сервере «результат» равен:

MarshalResult(data=[], errors={})

Однако, когда я печатаю ответ после использования Flask jsonify, я получаю это локально:

('{\n  "data": [], \n  "errors": {}\n}', '\n')

пока это печатается на сервере:

('[\n  [], \n  {}\n]', '\n')

Кто-нибудь знает, почему они не совпадают?


person rwal    schedule 12.11.2018    source источник
comment
Дважды проверьте, что версия Marshmallow как в реальном времени, так и в локальной версии одинакова. Начиная с Marshmallow >= 3, схемы всегда строгие: примечания по обновлению   -  person el.atomo    schedule 13.11.2018
comment
Оба используют Marshmallow == 2.15, но хорошо знать, что в v3.0 вносятся изменения.   -  person rwal    schedule 14.11.2018


Ответы (1)


Я исследовал еще немного и нашел одно решение проблемы (я чувствую себя немного глупо, поскольку решение прямо в документации), но не могу объяснить, почему возникает исходная проблема.

Решение (найденное здесь) заключается в использовании:

jsonify(result.data)

or:

activities_schema.jsonify(result)

Любой из этих методов вернет только данные, а не ошибки.

Я до сих пор не могу объяснить, почему это было несовместимо между сервером и моей локальной машиной, но, возможно, это другой вопрос.

person rwal    schedule 12.11.2018