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_mimetypeatributo de clase yapp.response_classconfigúrelo como werkzeug.pocoo.org/docs/wrappers/… flask.pocoo.org/docs/api/#flask.Flask.response_classapp.response_classcomo Simon señala, recuerde utilizarapp.make_responsepara 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
Responsedirectamente, pierde la oportunidad de personalizar las respuestas mediante la configuraciónapp.response_class. Elmake_responsemétodo utiliza elapp.responses_classpara hacer el objeto de respuesta. En esto, puede crear su propia clase, agregar hacer que su aplicación la use globalmente:fuente
make_responsees mejor que usarResponsefuente
Por lo general, no tiene que crear el
Responseobjeto 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_requestpara 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