Это простое приложение имеет два обработчика teardown_request
, и я ожидаю, что оба они будут вызываться для каждого запроса, независимо от того, что происходит в реализации представления, согласно документации
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)
Однако, когда я запускаю его и по очереди делаю запросы к трем представлениям, я получаю следующий результат:
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 -
Только один из teardown_request
функции вызываются, когда последнее представление вызывает исключение, не производное от werkzeug.exceptions.HTTPException
. Есть идеи, почему, или это ошибка во флаконе?