0
0
Flaskframework~5 mins

Context lifecycle execution in Flask

Choose your learning style9 modes available
Introduction

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.

When you want to access request data like form inputs or URL parameters inside your functions.
When you need to store information that should only last during a single web request.
When you want to share data across different parts of your app safely during a request.
When you want to run code before or after handling a web request.
When you want to manage resources like database connections that open and close with each request.
Syntax
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.

Examples
This sets a user name before handling any request, so you can use g.user inside your routes.
Flask
from flask import Flask, g

app = Flask(__name__)

@app.before_request
def set_user():
    g.user = 'Alice'
This checks if the request has an Authorization header before running the route. If not, it stops with a 401 error.
Flask
from flask import Flask, request

app = Flask(__name__)

@app.before_request
def check_auth():
    if not request.headers.get('Authorization'):
        return 'Unauthorized', 401
This runs after every request to clean up resources like database connections.
Flask
from flask import Flask

app = Flask(__name__)

@app.teardown_request
def close_db(error=None):
    print('Request finished, closing resources')
Sample Program

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.

Flask
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)
OutputSuccess
Important Notes

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.

Summary

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.