Ich verwende Flask und gebe eine XML-Datei von einer Get-Anfrage zurück. Wie setze ich den Inhaltstyp auf XML?
z.B
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
header("Content-type: text/xml")
return xml
Versuchen Sie es so:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
Der tatsächliche Inhaltstyp basiert auf dem Parameter mimetype und dem Zeichensatz (standardmäßig UTF-8).
Antwort- (und Anforderungs-) Objekte werden hier dokumentiert: http://werkzeug.pocoo.org/docs/wrappers/
flask.Response
, überschreibt dasdefault_mimetype
Klassenattribut, und festgelegt , dass alsapp.response_class
werkzeug.pocoo.org/docs/wrappers/... flask.pocoo.org/docs/api/#flask.Flask.response_classapp.response_class
wie Simon betont , denken Sie daranapp.make_response
, Ihre Antwortinstanz wie in der Antwort unten angegeben abzurufen .So einfach ist das
Ich hoffe es hilft
Update: Verwenden Sie diese Methode, da sie sowohl mit Python 2.x als auch mit Python 3.x funktioniert
und zweitens wird auch das Problem mit mehreren Headern beseitigt.
quelle
Ich mag die Antwort von @Simon Sapin und habe sie positiv bewertet. Am Ende nahm ich jedoch einen etwas anderen Weg und schuf meinen eigenen Dekorateur:
und benutze es so:
Ich denke, das ist etwas bequemer.
quelle
return 'msg', 200
, führt dies zuValueError: Expected bytes
. Ändern Sie stattdessen den Dekorator inreturn Response(*r, content_type='whatever')
. Das Tupel wird in Argumente entpackt. Vielen Dank für eine elegante Lösung!Verwenden Sie die Methode make_response , um eine Antwort mit Ihren Daten zu erhalten. Dann ist die Menge MIME - Typ - Attribut . Geben Sie zum Schluss diese Antwort zurück:
Wenn Sie
Response
direkt verwenden, verlieren Sie die Möglichkeit, die Antworten durch Festlegen anzupassenapp.response_class
. Diemake_response
Methode verwendet dasapp.responses_class
, um das Antwortobjekt zu erstellen. Hier können Sie Ihre eigene Klasse erstellen und hinzufügen, dass Ihre Anwendung sie global verwendet:quelle
make_response
besser ist als VerwendenResponse
quelle
Normalerweise müssen Sie das
Response
Objekt nicht selbst erstellen, da diesmake_response()
für Sie erledigt wird.Eine weitere Sache, es scheint, dass niemand das erwähnt hat
after_this_request
, ich möchte etwas sagen:after_this_request
Damit wir es schaffen
after_this_request
, sollte der Code folgendermaßen aussehen:quelle
Sie können die folgende Methode (python3.6.2) ausprobieren:
Fall eins:
Fall zwei:
Ich benutze Flask. Und wenn Sie json zurückgeben möchten, können Sie dies schreiben:
quelle