Globales d'application Flask - API de l'objet g

gest un espace de noms global au niveau de la requête utilisé pour partager des données entre plusieurs fonctions au sein de la même requête.

Parfrom flask import gImportation ; disponible uniquement lorsque le contexte d'application est actif.


Description de l'objet g

Fonctionnalités Description
Type instance de flask.ctx._AppCtxGlobals
Cycle de vie Créé avec le contexte d'application, détruit avec le contexte d'application.
Sécurité des threads Chaque requête/contexte possède son propre objet g indépendant.
Utilisation Lire et écrire des propriétés comme des objets ordinaires : g.user = ..., g.db = ...

Méthodes de _AppCtxGlobals

Méthodes Description
get(name, default=None) Récupère la valeur de l'attribut ; renvoie la valeur par défaut si l'attribut n'existe pas.
pop(name, default=None) Supprime et renvoie la valeur de l'attribut.
setdefault(name, default=None) Si l'attribut n'existe pas, définit la valeur par défaut et la renvoie.
__contains__(name) Prend en charge hasattr(g, "name") or "name" in g

Modèles d'utilisation typiques

Exemple

from flask import Flask, g

app = Flask(__name__)

def get_db():
    """La connexion à la base de données est créée une seule fois et stockée dans g pour être réutilisée"""
    if "db" not in g:
        g.db = connect_to_database()
    return g.db

@app.before_request
def load_user():
    """Charger les informations de l'utilisateur dans g avant le début de la requête"""
    user_id = session.get("user_id")
    if user_id:
        g.user = query_user(user_id)  # g.user peut être utilisé directement dans la fonction de vue
    else:
        g.user = None

@app.route("/profile")
def profile():
    if g.user is None:
        return "Non connecté"
    return f"Bonjour, {g.user.name}"

@app.teardown_appcontext
def close_db(error):
    """Nettoyer les ressources à la fin de la requête"""
    db = g.pop("db", None)
    if db is not None:
        db.close()

Principes fondamentaux: L'objet g n'est utilisé que pour le partage de données au sein de la même requête. Ne stockez pas de données inter-requêtes dans g, et ne stockez pas dans g des informations qui doivent être persistées.

autres extensions