Resposta vazia intencional do frasco Python

98

Existe uma maneira de retornar uma resposta (do make_response()objeto ou semelhante) com certas propriedades para que não renderize a página novamente e não faça mais nada. Estou tentando executar um código no servidor sem gerar nenhuma saída

Um simples 'retorno nenhum' produz:

ValueError: View function did not return a response

Isso deve ser possível porque o seguinte apenas baixa um arquivo e não renderiza o modelo:

myString = "First line of a document"
response = make_response(myString)
response.headers["Content-Disposition"] = "attachment; filename=myFile.txt"
return response
RukTech
fonte

Respostas:

170

Você está respondendo a uma solicitação, seu servidor HTTP deve retornar algo . A resposta HTTP 'resposta vazia' é 204 No Content:

return ('', 204)

Observe que retornar um arquivo para o navegador não é uma resposta vazia, apenas diferente de uma resposta HTML.

Martijn Pieters
fonte
13
Ftr: você pode usar httplib.NO_CONTENTpara evitar o número mágico.
dtk
11
Observe que o equivalente do Python 2 httplib.NO_CONTENTno Python 3 é http.HTTPStatus.NO_CONTENT.
bfontaine de
2
@bfontaine: ouhttp.client.NO_CONTENT
Martijn Pieters
2
@bfontaine: na parte inferior da httpdocumentação do pacote ; estes costumavam ser o local normal até o HTTPStatusenum ser introduzido, consulte github.com/python/cpython/commit/…
Martijn Pieters