The request context in Flask helps your app know details about the current web request, like the URL or form data. It makes it easy to access this info anywhere while handling that request.
Request context in Flask
from flask import Flask, request app = Flask(__name__) # Access request data inside a route @app.route('/example', methods=['GET', 'POST']) def example(): user_agent = request.headers.get('User-Agent') form_data = request.form.get('name') return f"User agent: {user_agent}, Name: {form_data}"
The request object is available only when Flask is handling a request.
Flask uses the request context to keep track of the current request data behind the scenes.
from flask import Flask, request app = Flask(__name__) @app.route('/') def home(): ip = request.remote_addr return f"Your IP is {ip}"
from flask import Flask, request app = Flask(__name__) @app.route('/submit', methods=['POST']) def submit(): username = request.form.get('username') return f"Hello, {username}!"
from flask import Flask, request app = Flask(__name__) @app.route('/agent') def agent(): agent = request.headers.get('User-Agent') return f"Your browser is {agent}"
This Flask app has one route /greet. It reads the name from URL query parameters or form data. It also reads the browser info from the request headers. Then it returns a greeting message including both.
from flask import Flask, request app = Flask(__name__) @app.route('/greet', methods=['GET', 'POST']) def greet(): name = request.args.get('name') or request.form.get('name') or 'Guest' user_agent = request.headers.get('User-Agent') return f"Hello, {name}! Your browser is {user_agent}." if __name__ == '__main__': app.run(debug=True)
The request object only works inside a request context, like inside route functions.
Trying to use request outside a request (like at app startup) will cause errors.
You can use with app.test_request_context(): to create a request context for testing.
The request context holds info about the current web request.
Use request to get data like headers, form inputs, and client IP.
It works only while handling a request, inside route functions or similar.