Flask uses contexts to keep track of data during a request or application run. This helps Flask know what data belongs to which user or task without mixing them up.
Context lifecycle execution in Flask
from flask import Flask, request, g app = Flask(__name__) @app.before_request def before(): # Code to run before each request g.user = 'Guest' @app.route('/') def index(): return f"Hello, {g.user}!" @app.teardown_request def teardown(exception=None): # Code to run after each request pass
@app.before_request runs code before each request starts.
@app.teardown_request runs code after each request ends, even if there was an error.
g.user inside your routes.from flask import Flask, g app = Flask(__name__) @app.before_request def set_user(): g.user = 'Alice'
from flask import Flask, request app = Flask(__name__) @app.before_request def check_auth(): if not request.headers.get('Authorization'): return 'Unauthorized', 401
from flask import Flask app = Flask(__name__) @app.teardown_request def close_db(error=None): print('Request finished, closing resources')
This Flask app sets a user name from the URL query parameter before each request. The route greets the user by name or says 'Guest' if no name is given. After the request, it prints a message in the console.
from flask import Flask, g, request app = Flask(__name__) @app.before_request def before(): g.user = request.args.get('user', 'Guest') @app.route('/') def index(): return f"Hello, {g.user}!" @app.teardown_request def teardown(exception=None): print('Request ended') if __name__ == '__main__': app.run(debug=True)
The g object is a place to store data during a request. It resets for each new request.
Contexts help Flask know which request is running, so data doesn't get mixed between users.
Use before_request to prepare data and teardown_request to clean up.
Flask uses context lifecycle hooks to run code before and after each request.
This helps manage data and resources safely during web requests.
Use g to store request-specific data accessible in your routes.