Estoy usando Flask y devuelvo un archivo XML de una solicitud de obtención. ¿Cómo configuro el tipo de contenido en xml?
p.ej
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
header("Content-type: text/xml")
return xml
Intenta así:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
El tipo de contenido real se basa en el parámetro mimetype y el juego de caracteres (el valor predeterminado es UTF-8).
Los objetos de respuesta (y solicitud) se documentan aquí: http://werkzeug.pocoo.org/docs/wrappers/
flask.Response
, anule eldefault_mimetype
atributo de clase yapp.response_class
configúrelo como werkzeug.pocoo.org/docs/wrappers/… flask.pocoo.org/docs/api/#flask.Flask.response_classapp.response_class
como Simon señala, recuerde utilizarapp.make_response
para obtener su instancia de respuesta como se indica en la respuesta a continuación .Tan simple como esto
Espero eso ayude
Actualización: utilice este método porque funcionará con python 2.xy python 3.x
y en segundo lugar también elimina el problema de múltiples encabezados.
fuente
Me gusta y voté por la respuesta de @Simon Sapin. Sin embargo, terminé tomando una táctica ligeramente diferente y creé mi propio decorador:
y úsalo así:
Creo que esto es un poco más cómodo.
fuente
return 'msg', 200
, esto conducirá aValueError: Expected bytes
. En cambio, cambie el decorador areturn Response(*r, content_type='whatever')
. Descomprimirá la tupla en argumentos. ¡Sin embargo, gracias por una solución elegante!Use el método make_response para obtener una respuesta con sus datos. Luego establezca el atributo mimetype . Finalmente devuelva esta respuesta:
Si usa
Response
directamente, pierde la oportunidad de personalizar las respuestas mediante la configuraciónapp.response_class
. Elmake_response
método utiliza elapp.responses_class
para hacer el objeto de respuesta. En esto, puede crear su propia clase, agregar hacer que su aplicación la use globalmente:fuente
make_response
es mejor que usarResponse
fuente
Por lo general, no tiene que crear el
Response
objeto usted mismo porquemake_response()
se encargará de eso por usted.Una cosa más, parece que nadie mencionó el
after_this_request
, quiero decir algo:after_this_request
para que podamos hacerlo
after_this_request
, el código debería verse así:fuente
Puede probar el siguiente método (python3.6.2):
caso uno :
caso dos:
Estoy usando Flask. Y si quieres devolver json, puedes escribir esto:
fuente