240 votes

Python Flask, comment définir le type de contenu

J'utilise Flask et je retourne un fichier XML à partir d'une requête get. Comment définir le type de contenu?

par exemple

 @app.route('/ajax_ddl')
def ajax_ddl():
    xml = 'foo'
    header("Content-type: text/xml")
    return xml
 

344voto

Simon Sapin Points 2472

Essayez comme ça:

 from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
    xml = 'foo'
    return Response(xml, mimetype='text/xml')
 

Le type de contenu réel est basé sur le paramètre mimetype et le jeu de caractères (par défaut, UTF-8).

Les objets réponse (et requête) sont documentés ici: http://werkzeug.pocoo.org/docs/wrappers/

191voto

Harsh Daftary Points 134

Aussi simple que cela

 x = "some data you want to return"
return x, 200, {'Content-Type': 'text/css; charset=utf-8'}
 

J'espère que ça aide

54voto

Michael Wolf Points 504

J'aime et j'ai bien voté la réponse de @Simon Sapin. Cependant, j'ai fini par adopter une approche légèrement différente et j'ai créé mon propre décorateur:

 from flask import Response
from functools import wraps

def returns_xml(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        r = f(*args, **kwargs)
        return Response(r, content_type='text/xml; charset=utf-8')
    return decorated_function
 

et utilisez-le ainsi:

 @app.route('/ajax_ddl')
@returns_xml
def ajax_ddl():
    xml = 'foo'
    return xml
 

Je pense que c'est légèrement plus confortable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X