Sometime there is some code that you would like to run after the requests was served. The after_request hook can help you in this, thoigh beware, it won't run in the rare (well, hopefully rare) cases when there is an uncaught exception in the route.
examples/flask/after_request/app.py
from flask import Flask, abort
import datetime
app = Flask(__name__)
@app.after_request
def after_request(response):
app.logger.info("after_request")
return response
@app.route("/")
def main():
app.logger.info("main route")
return "Hello " + str(datetime.datetime.now())
@app.route("/crash")
def crash():
app.logger.info("crash route")
a = 0
b = 3 / a
Run as:
FLASK_APP=app FLASK_DEBUG=1 flask run
Output on the console:
[2020-06-23 13:21:22,699] INFO in app: main route
[2020-06-23 13:21:22,699] INFO in app: after_request
127.0.0.1 - - [23/Jun/2020 13:21:22] "GET / HTTP/1.1" 200 -
Visiting the http://localhost:5000/crash URL shows a stack trace like this:
[2020-06-23 13:21:11,582] INFO in app: crash route
127.0.0.1 - - [23/Jun/2020 13:21:11] "GET /crash HTTP/1.1" 500 -
Traceback (most recent call last):
...
File "/home/gabor/work/code-maven.com/examples/flask/after_request/app.py", line 20, in crash
b = 3 / a
ZeroDivisionError: division by zero