Подтвердить что ты не робот

Принудительное применение /json MIME-тип в представлении (Flask)

Я не могу понять, как заставить MIME-тип application/json для представления в Flask. Вот простой вид, который я собрал вместе для демонстрационных целей:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'
    return ret

Строка JSON (содержащаяся в переменной ret) собирается из другого источника (используя stdout из другой программы, используя subprocess), поэтому я не может использовать jsonify с флягой.

Я посмотрел "Возвращение Json" Документация и this Вопрос Stackoverflow, но до сих пор мне не повезло. Я некоторое время смотрю вокруг и продолжаю поиски, но думал, что попрошу здесь на всякий случай, если кто-нибудь столкнется с этим.

Спасибо.


См. ниже

Решение:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'

    resp = Response(response=ret,
                    status=200,
                    mimetype="application/json")

    return resp

Я нашел этот сайт полезным: Внедрение RESTful Web API с Python и Flask

4b9b3361

Ответ 1

Как заметил soulseekah, make_response, вероятно, является лучшим вариантом в этом случае. Затем установите свойство mimetype.

r = make_response( data )
r.mimetype = 'application/json'
return r

Ответ 2

Если вы используете

from flask import jsonify

а потом в вашем коде

return jsonify(somedict)

затем jsonify() автоматически устанавливает тип mime на "application/json"

Редактировать:

Ранее это считалось риском, но не больше, и Flask также обновил свою рекомендацию: "ECMAScript 5 закрыл эту уязвимость, поэтому уязвимы только старые браузеры. Все эти браузеры имеют другие более серьезные уязвимости, поэтому это поведение было изменено. и jsonify() теперь поддерживает сериализацию массивов. " http://flask.pocoo.org/docs/1.0/security/#json-security