Use before_request to run code before every web request in Flask. It helps you add checks or setup without changing each route.
0
0
Before_request as middleware alternative in Flask
Introduction
Check if a user is logged in before accessing any page
Set up database connections before handling requests
Log request details like IP and time for every visit
Modify request data or headers before routes run
Syntax
Flask
@app.before_request def function_name(): # code to run before each request
The function runs before every request automatically.
Return a response inside this function to stop the request from reaching routes.
Examples
This example redirects users to login if they are not logged in.
Flask
@app.before_request def check_login(): if not session.get('user'): return redirect('/login')
This logs the visitor's IP and time before handling the request.
Flask
@app.before_request def log_request(): print(f"Request from {request.remote_addr} at {datetime.now()}")
Sample Program
This Flask app uses before_request to print info and redirect users to login if not logged in. After login, users can access the home page.
Flask
from flask import Flask, request, redirect, session from datetime import datetime app = Flask(__name__) app.secret_key = 'secret' @app.before_request def before(): print(f"Before request: {request.path} at {datetime.now()}") if request.path != '/login' and not session.get('user'): return redirect('/login') @app.route('/login') def login(): session['user'] = 'guest' return 'Logged in! Go to /' @app.route('/') def home(): return 'Welcome to the home page!' if __name__ == '__main__': app.run(debug=True)
OutputSuccess
Important Notes
Use before_request for simple global checks or setup.
It runs before every request, so keep code fast to avoid slowing your app.
Returning a response inside before_request stops the request from reaching route handlers.
Summary
before_request runs code before every Flask request.
It is useful for login checks, logging, or setup tasks.
Returning a response here can redirect or block requests early.