Python Flask Celowo pusta odpowiedź

98

Czy istnieje sposób na zwrócenie odpowiedzi (z make_response()obiektu lub podobnej) z określonymi właściwościami, aby nie renderowała ponownie strony i nie robiła też nic innego. Próbuję uruchomić kod na serwerze bez generowania żadnych danych wyjściowych

Prosty zwrot „Brak” daje:

ValueError: View function did not return a response

Powinno to być możliwe, ponieważ poniższe czynności tylko pobierają plik i nie renderują szablonu:

myString = "First line of a document"
response = make_response(myString)
response.headers["Content-Disposition"] = "attachment; filename=myFile.txt"
return response
RukTech
źródło

Odpowiedzi:

171

Odpowiadasz na żądanie, Twój serwer HTTP musi coś zwrócić . Odpowiedź HTTP „Pusta odpowiedź” to 204 No Content:

return ('', 204)

Zwróć uwagę, że zwrot pliku do przeglądarki nie jest pustą odpowiedzią, różni się tylko od odpowiedzi HTML.

Martijn Pieters
źródło
14
Ftr: możesz użyć, httplib.NO_CONTENTaby uniknąć magicznej liczby.
dtk
11
Zauważ, że odpowiednikiem Pythona 2 httplib.NO_CONTENTw Pythonie 3 jest http.HTTPStatus.NO_CONTENT.
bfontaine
2
@bfontaine: lubhttp.client.NO_CONTENT
Martijn Pieters
2
@bfontaine: na dole httpdokumentacji pakietu ; te stosuje się normalne położenie aż HTTPStatuswprowadzono wyliczenia patrz github.com/python/cpython/commit/...
Martijn Pieters