J'utilise Flask et je renvoie un fichier XML à partir d'une demande get. Comment définir le type de contenu sur xml?
par exemple
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
header("Content-type: text/xml")
return xml
Essayez comme ceci:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
Le Content-Type réel est basé sur le paramètre mimetype et le charset (par défaut UTF-8).
Les objets de réponse (et de requête) sont documentés ici: http://werkzeug.pocoo.org/docs/wrappers/
flask.Response
, remplacez l'default_mimetype
attribut de classe et définissez-la commeapp.response_class
werkzeug.pocoo.org/docs/wrappers/… flask.pocoo.org/docs/api/#flask.Flask.response_classapp.response_class
comme le souligne Simon, n'oubliez pas d'utiliserapp.make_response
pour obtenir votre instance de réponse comme indiqué dans la réponse ci-dessous .Aussi simple que ça
J'espère que ça aide
Mise à jour: utilisez cette méthode car elle fonctionnera avec python 2.x et python 3.x
et deuxièmement, il élimine également le problème d'en-tête multiple.
la source
J'aime et j'ai voté pour la réponse de @Simon Sapin. J'ai fini par adopter une approche légèrement différente, cependant, et j'ai créé mon propre décorateur:
et utilisez-le ainsi:
Je pense que c'est un peu plus confortable.
la source
return 'msg', 200
, cela conduira àValueError: Expected bytes
. Au lieu de cela, changez le décorateur enreturn Response(*r, content_type='whatever')
. Il décompressera le tuple en arguments. Merci cependant pour une solution élégante!Utilisez la méthode make_response pour obtenir une réponse avec vos données. Puis définissez l' attribut mimetype . Enfin renvoyez cette réponse:
Si vous utilisez
Response
directement, vous perdez la possibilité de personnaliser les réponses en définissantapp.response_class
. Lamake_response
méthode utiliseapp.responses_class
pour créer l'objet de réponse. En cela, vous pouvez créer votre propre classe, ajouter pour que votre application l'utilise globalement:la source
make_response
vaut mieux utiliser que d'utiliserResponse
la source
Habituellement, vous n'êtes pas obligé de créer l'
Response
objet vous-même, car vousmake_response()
en prendrez soin à votre place.Encore une chose, il semble que personne n'ait mentionné le
after_this_request
, je veux dire quelque chose:after_this_request
pour que nous puissions le faire avec
after_this_request
, le code devrait ressembler à ceci:la source
Vous pouvez essayer la méthode suivante (python3.6.2) :
cas un :
cas deux :
J'utilise Flask .Et si vous voulez retourner json, vous pouvez écrire ceci:
la source