Я использую Flask и возвращаю XML-файл из запроса get. Как мне установить тип контента на xml?
например
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
header("Content-type: text/xml")
return xml
Попробуйте вот так:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
Фактический Content-Type основан на параметре mimetype и кодировке (по умолчанию UTF-8).
Объекты ответа (и запроса) описаны здесь: http://werkzeug.pocoo.org/docs/wrappers/
flask.Response
, переопределитеdefault_mimetype
атрибут класса и установите его какapp.response_class
werkzeug.pocoo.org/docs/wrappers/… flask.pocoo.org/docs/api/#flask.Flask.response_classapp.response_class
как указывает Саймон, не забудьте использовать,app.make_response
чтобы получить свой экземпляр ответа, как указано в ответе ниже .Так просто, как это
Надеюсь, поможет
Обновление: используйте этот метод, потому что он будет работать как с python 2.x, так и с python 3.x
и во-вторых, это также устраняет проблему множественных заголовков.
источник
Мне нравится и проголосовал ответ @Simon Sapin. Однако в итоге я взял немного другую тактику и создал свой собственный декоратор:
и использовать его таким образом:
Я думаю, что это немного удобнее.
источник
return 'msg', 200
, это приведет кValueError: Expected bytes
. Вместо этого измените декоратор наreturn Response(*r, content_type='whatever')
. Распакует кортеж с аргументами. Спасибо за элегантное решение!Используйте метод make_response, чтобы получить ответ с вашими данными. Затем установите атрибут mimetype . Наконец верните этот ответ:
Если вы используете
Response
напрямую, вы теряете возможность настроить ответы, установивapp.response_class
.make_response
Метод использует ,app.responses_class
чтобы сделать объект ответа. В этом вы можете создать свой собственный класс, добавив, что ваше приложение использует его глобально:источник
make_response
лучше, чем использоватьResponse
источник
Обычно вам не нужно создавать
Response
объект самостоятельно, потомуmake_response()
что позаботится об этом за вас.Еще одна вещь, кажется, что никто не упомянул
after_this_request
, я хочу кое-что сказать:after_this_request
так что мы можем сделать это
after_this_request
, код должен выглядеть следующим образом:источник
Вы можете попробовать следующий метод (python3.6.2):
первый случай:
Случай два:
Я использую Flask. И если вы хотите вернуть json, вы можете написать это:
источник