Middleware is a function that runs before or after every request in a Flask app. It is useful for logging, security checks, or modifying responses globally.
Create a middleware function that logs request details before processing:
from flask import Flask, request
app = Flask(__name__)
@app.before_request
def log_request():
print(f"Incoming request: {request.method} {request.path}")
@app.after_request
def modify_response(response):
response.headers["X-Custom-Header"] = "Middleware Applied"
return response
@app.route("/")
def home():
return "Welcome to Flask Middleware Example!"
if __name__ == "__main__":
app.run(debug=True)
📌 Explanation:
@app.before_request
: Runs before every request, logs request details.@app.after_request
: Runs after every request, modifies response headers.Flask provides request hooks that allow developers to execute code at specific points in the request lifecycle:
Hook Purpose
@app.before_request Executes before handling a request
@app.after_request Executes after handling a request
@app.teardown_request Executes after the request, even if an exception occurs
@app.before_first_request Runs only once, before the first request
before_first_request
HookThis hook runs only once, before the first request is processed:
@app.before_first_request
def initialize():
print("Flask App Started - Running Before First Request!")
teardown_request
HookThis hook executes after each request, even if an error occurs:
@app.teardown_request
def cleanup(error=None):
if error:
print(f"An error occurred: {error}")
print("Request cleanup executed.")
For more advanced use cases, middleware can be implemented as a custom class:
class CustomMiddleware:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
print(f"Custom Middleware: {environ['REQUEST_METHOD']} {environ['PATH_INFO']}")
return self.app(environ, start_response)
app.wsgi_app = CustomMiddleware(app.wsgi_app)
python app.py
In this guide, we covered:
✅ Middleware in Flask for request logging and response modification.
✅ Flask request hooks (before_request
, after_request
, teardown_request
).
✅ A custom middleware class to process requests globally.
Using middleware and hooks, we can enhance security, logging, and request handling efficiency in Flask applications. 🚀