Concept Flow - G object for request-scoped data
Start Request
Create g object
Store data in g
Use g data in view
Request ends
g data cleared
Each web request creates a fresh g object to store data accessible only during that request.
from flask import Flask, g, request app = Flask(__name__) @app.before_request def before(): g.user = request.headers.get('User') @app.route('/') def index(): return f"Hello, {g.user}!"
| Step | Action | g.user value | Output |
|---|---|---|---|
| 1 | Start request, create g | unset | No output yet |
| 2 | before_request runs, sets g.user = 'Alice' | 'Alice' | No output yet |
| 3 | index() reads g.user | 'Alice' | Returns 'Hello, Alice!' |
| 4 | Request ends, g cleared | unset | No output |
| Variable | Start | After Step 2 | After Step 3 | Final |
|---|---|---|---|---|
| g.user | unset | 'Alice' | 'Alice' | unset (cleared after request) |
Flask's g object stores data only during one request. Use g to save info like current user or db connection. Set g values in before_request or view functions. Data in g is cleared after request ends. Do not use g for data sharing between requests.
g object in Flask?gg object is designed to hold data only during the life of one request.g does not persist data beyond the current request.g = request-scoped storage [OK]g lasts only for one request [OK]g stores data across requestsg with session or global variablesg manages database connections automaticallyg object inside a Flask view function?gg acts like a simple object where you assign attributes using dot notation.g.user = 'Alice', which is the correct way. g['user'] = Alice uses dictionary style which is invalid. Options B and C use methods that g does not have.g attributes [OK]g.attribute = value [OK]g['key']gg with Flask's session objectfrom flask import Flask, g
app = Flask(__name__)
@app.before_request
def before():
g.value = 10
@app.route('/')
def index():
g.value += 5
return str(g.value)before_request functiong.value is set to 10.index functiong.value, making it 15, then returns it as a string.g.value starts 10, adds 5 = 15 [OK]g resets each request; additions apply after setup [OK]g.value keeps old values between requestsbefore_request runs before routeg? from flask import Flask, g
app = Flask(__name__)
@app.route('/')
def index():
if not hasattr(g, 'counter'):
g.counter = 0
g.counter += 1
return str(g.counter)g scopeg is reset for each request, so counter does not persist between requests.counter is set to 0 then incremented to 1 every time.g data is request-scoped, no persistence [OK]g resets each request; no data persists [OK]g.counter to keep increasing across requestsg forbids new attributesg with session or global variablesg. Which code snippet correctly opens the connection once per request and reuses it in multiple functions?from flask import Flask, g
app = Flask(__name__)
def get_db():
if not hasattr(g, 'db'):
g.db = open_database_connection()
return g.db
@app.route('/')
def index():
db = get_db()
# use db
return 'OK'get_db functiong.db exists; if not, it opens the connection and saves it to g.gg is not global. It closes the connection automatically after each function is incorrect; closing is not automatic here.g to cache per-request resources [OK]g to reuse during request [OK]g stores data globally across requestsg auto-closes resourcesPass the test and this pattern moves unknown