Estou usando o Flask e retorno um arquivo XML de uma solicitação get. Como defino o tipo de conteúdo para xml?
por exemplo
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
header("Content-type: text/xml")
return xml
Tente assim:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
O tipo de conteúdo real é baseado no parâmetro mimetype e no conjunto de caracteres (o padrão é UTF-8).
Os objetos de resposta (e solicitação) estão documentados aqui: http://werkzeug.pocoo.org/docs/wrappers/
flask.Response
, substituir odefault_mimetype
atributo de classe e defina-o comoapp.response_class
werkzeug.pocoo.org/docs/wrappers/... flask.pocoo.org/docs/api/#flask.Flask.response_classapp.response_class
como Simon aponta, lembre-se de usarapp.make_response
para obter sua instância de resposta, como indicado na resposta abaixo .Tão simples como isso
Espero que ajude
Atualização: use esse método porque ele funcionará com o python 2.xe python 3.x
e segundo, também elimina o problema de vários cabeçalhos.
fonte
Gosto e votei na resposta de @Simon Sapin. Acabei adotando uma tática um pouco diferente, no entanto, e criei meu próprio decorador:
e use-o assim:
Eu acho que isso é um pouco mais confortável.
fonte
return 'msg', 200
, isso levará aValueError: Expected bytes
. Em vez disso, mude o decorador parareturn Response(*r, content_type='whatever')
. Ele descompactará a tupla para argumentos. Obrigado, porém, por uma solução elegante!Use o método make_response para obter uma resposta com seus dados. Em seguida, defina o atributo mimetype . Por fim, retorne esta resposta:
Se você usar
Response
diretamente, perderá a chance de personalizar as respostas configurandoapp.response_class
. Omake_response
método usa oapp.responses_class
para criar o objeto de resposta. Neste você pode criar sua própria classe, adicionar make seu aplicativo usa globalmente:fonte
make_response
é melhor do que usarResponse
fonte
Normalmente você não precisa criar o
Response
objeto, porquemake_response()
ele cuidará disso para você.Mais uma coisa, parece que ninguém mencionou o
after_this_request
, eu quero dizer uma coisa:after_this_request
para que possamos fazê-lo
after_this_request
, o código deve ficar assim:fonte
Você pode tentar o seguinte método (python3.6.2):
caso um:
caso dois:
Estou usando o Flask. E se você deseja retornar o json, pode escrever o seguinte:
fonte