Questa semplice applicazione, ha due teardown_request
gestori, e mi aspetto ciascuno di essi di essere chiamato per ogni richiesta, non importa cosa succede nella realizzazione di vista, come per il documentationPerché viene chiamata una sola funzione teardown_request di Flask quando la vista solleva l'eccezione?
import flask
import werkzeug.exceptions
app = flask.Flask(__name__)
@app.teardown_request
def teardown1(response):
print "Teardown 1"
return response
@app.teardown_request
def teardown2(response):
print "Teardown 2"
return response
@app.route("/")
def index():
return "chunky bacon"
@app.route("/httpexception")
def httpexception():
raise werkzeug.exceptions.BadRequest("no bacon?")
@app.route("/exception")
def exception():
raise Exception("bacoff")
if __name__ == "__main__":
app.run(port=5000)
Tuttavia, quando ho eseguirlo e fare richieste ai tre punti di vista, a sua volta, ottengo il seguente output:
Teardown 2 Teardown 1 127.0.0.1 - - [15/Nov/2011 18:53:16] "GET/HTTP/1.1" 200 - Teardown 2 Teardown 1 127.0.0.1 - - [15/Nov/2011 18:53:27] "GET /httpexception HTTP/1.1" 400 - Teardown 2 127.0.0.1 - - [15/Nov/2011 18:53:33] "GET /exception HTTP/1.1" 500 -
Solo uno dei teardown_request
funzioni viene chiamato quando un'eccezione che non è derivata da werkzeug.exceptions.HTTPException
è sollevata dall'ultimo vista. Qualche idea del perché, o si tratta di un bug in fiaschetta?
+1 - grazie anche per aver postato la risposta! –