Nach the Flask 0.12 docs:Warum kann ich flask.g nicht verwenden, nachdem eine Anfrage kommt?
flask.g
...... Beginnend mit Flask 0,10 diese über die Anwendung Kontext gespeichert ist, und nicht mehr auf dem Anforderungskontext, die es bedeutet, wird zur Verfügung, wenn nur der Anwendungskontext ist gebunden und noch nicht eine Anfrage.
Soweit ich weiß, wenn eine Anfrage kommt, wird ein Anwendungskontext erstellt, wenn es keinen gibt. Sollte also nicht flask.g
verfügbar sein, nachdem eine Anfrage gekommen ist, da die Anfrage das Vorhandensein eines Anwendungskontextes sicherstellt?
Als Boun Frage: Warum sollte ich Datenbankverbindungen auf g
statt request
speichern? Ich weiß, dass das Erstellen eines Anwendungskontexts weniger "teuer" ist als das Erstellen eines Anforderungskontexts, aber wenn eine Anforderung kommt, wird trotzdem ein Anforderungskontext erstellt.
Danke, Sir, das macht Sinn. Aber es gibt ein Problem, wenn eine Anfrage kommt und ein Anwendungskontext bereits existiert: aus dem [Quellcode] (https://github.com/pallets/flask/blob/1949c4a9abc174bf29620f6dd8ceab9ed3ace2eb/flask/ctx.py#L230) scheint es, dass der vorhandene Anwendungskontext würde wiederverwendet werden, wenn app_ctx None oder app_ctx.app! = self.app ist, aber die Dokumentation gibt an, dass ein Anwendungskontext [nicht zwischen Anfragen geteilt wird] (http://flask.pocoo.org/) docs/0.12/appcontext/# locality-of-the-context) ... –
Dieser Code stellt sicher, dass der richtige Anforderungskontext mit dem richtigen Anwendungskontext gepaart wird, nicht mehr. Der App-Kontext * immer * existiert bereits, wenn eine Anfrage eingeht.Durch diesen Code wird sichergestellt, dass der Anwendungskontext für diese Anforderung oben auf dem Stapel liegt, sodass der gesamte für diese Anforderung ausgeführte Code über das richtige Objekt "flask.g" verfügt. –
Dies gilt nur, wenn mehr als ein App-Kontext aktiv ist. –