6 votes

Did you mean: "Flask tutorial: Pourquoi utilisons-nous le contexte de l'application pour la connexion à la base de données?"

Je suis en train d'étudier le tutoriel de Flask et je suis perdu quant à l'utilisation du contexte de l'application pour se connecter à la base de données. Sur la page, l'auteur dit :

Créer et fermer des connexions à la base de données tout le temps est très inefficace, donc vous aurez besoin de les garder plus longtemps. Parce que les connexions à la base de données encapsulent une transaction, vous devrez vous assurer qu'une seule requête utilise la connexion à la fois.

Cependant, il semble que créer et fermer la connexion est exactement ce que réalise le code. Nous avons une vue get_db qui se connecte à la base de données, retourne un objet de connexion et l'ajoute au contexte de l'application s'il n'est pas présent. Nous avons également une vue close_db qui ferme l'objet de connexion lorsque le contexte de l'application est démonté.

Ma compréhension de ce qui se passe ici est la suivante : Un utilisateur se connecte à la page d'accueil de l'application, établit une connexion avec la base de données puis la ferme. Chaque fois que l'utilisateur fait une requête à la page (par exemple, poster une nouvelle entrée de blog), une nouvelle connexion est établie avec la base de données puis fermée lorsque la requête est terminée. Alors quelle est la valeur d'utiliser le contexte de l'application ? Pourquoi ne pas simplement créer et fermer une connexion pour chaque requête directement ?

Peut-être que je ne comprends pas quelque chose ici - toute aide est appréciée !

4voto

cowbert Points 1712

C'est mal documenté. Mais fondamentalement, l'objectif de tout le contexte de l'application est d'abstraire des objets de données spécifiques à l'application mais persistants à travers les requêtes (apparemment pour permettre des applications multi-locataires qui sont toutes des instances distinctes de Flask sans tout attacher au contexte de requête). En tout cas, flask.g est le dictionnaire spécifique au contexte de l'application pour le contexte d'application actuel. De cette façon, vous pouvez appeler get_db() dès la toute première requête, insérer l'objet de connexion résultant dans g et ensuite utiliser g.dbconn plus tard dans l'application, qui ne se termine pas à chaque requête (vous voulez probablement utiliser la même connexion à chaque accès à la page). Je pense que flask.g est comme une instance de classe (en l'occurrence l'application) de globals().

Voir aussi: http://flask.pocoo.org/docs/0.12/appcontext/#app-context

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X