Używam Flask i zwracam plik XML z żądania get. Jak ustawić typ zawartości na xml?
na przykład
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
header("Content-type: text/xml")
return xml
Spróbuj tak:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
Rzeczywisty typ zawartości jest oparty na parametrze mimetype i zestawie znaków (domyślnie UTF-8).
Obiekty odpowiedzi (i żądania) są udokumentowane tutaj: http://werkzeug.pocoo.org/docs/wrappers/
flask.Response
, nadpisaćdefault_mimetype
atrybut class i ustaw, które jakoapp.response_class
werkzeug.pocoo.org/docs/wrappers/... flask.pocoo.org/docs/api/#flask.Flask.response_classapp.response_class
tak, jak wskazuje Simon, pamiętaj, aby użyćapp.make_response
instancji odpowiedzi, jak wskazano w odpowiedzi poniżej .Tak proste
Mam nadzieję, że to pomoże
Aktualizacja: użyj tej metody, ponieważ będzie działać zarówno z pythonem 2.x, jak i pythonem 3.x
a po drugie eliminuje również problem z wieloma nagłówkami.
źródło
Podoba mi się odpowiedź @Simon Sapin. Skończyło się jednak na nieco innej takcie i stworzyłem własnego dekoratora:
i użyj go w ten sposób:
Myślę, że jest to nieco wygodniejsze.
źródło
return 'msg', 200
, spowoduje toValueError: Expected bytes
. Zamiast tego zmień dekorator nareturn Response(*r, content_type='whatever')
. Rozpakuje krotkę do argumentów. Dziękuję jednak za eleganckie rozwiązanie!Użyj metody make_response, aby uzyskać odpowiedź ze swoimi danymi. Następnie ustaw atrybut MIME . Na koniec zwróć tę odpowiedź:
Jeśli używasz
Response
bezpośrednio, tracisz szansę na dostosowanie odpowiedzi przez ustawienieapp.response_class
.make_response
Metoda wykorzystujeapp.responses_class
, aby obiekt odpowiedzi. W tym możesz stworzyć własną klasę, dodać, aby aplikacja używała jej globalnie:źródło
make_response
jest lepsze niż używanieResponse
źródło
Zwykle nie musisz samodzielnie tworzyć
Response
obiektu, ponieważmake_response()
zajmie się tym za Ciebie.Jeszcze jedno, wydaje się, że nikt nie wspomniał o
after_this_request
, chcę coś powiedzieć:after_this_request
więc możemy to zrobić
after_this_request
, kod powinien wyglądać tak:źródło
Możesz wypróbować następującą metodę (python3.6.2) :
przypadek pierwszy :
przypadek drugi :
Używam Flaska. Jeśli chcesz zwrócić json, możesz napisać to:
źródło