Ответ 1
Как заметил soulseekah, make_response, вероятно, является лучшим вариантом в этом случае. Затем установите свойство mimetype.
r = make_response( data )
r.mimetype = 'application/json'
return r
Я не могу понять, как заставить 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
Как заметил soulseekah, make_response, вероятно, является лучшим вариантом в этом случае. Затем установите свойство mimetype.
r = make_response( data )
r.mimetype = 'application/json'
return r
Если вы используете
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