La préservation de l'état global dans un flacon d'application

Je suis en train d'enregistrer un cache dictionnaire dans mon flask application.

Aussi loin que je le comprends, le Le Contexte De L'Application, en particulier la flacon.g objet doit être utilisé pour cela.

De l'installation:

import flask as f

app = f.Flask(__name__)

Maintenant, si je fais:

with app.app_context():
    f.g.foo = "bar"
    print f.g.foo

Il imprime bar.

Continue avec les éléments suivants:

with app.app_context():
    print f.g.foo

AttributeError: '_AppCtxGlobals' object has no attribute 'foo'

Je ne la comprennent pas et les docs ne sont pas aider du tout. Si je lis correctement l'état doit avoir été conservé.

Une autre idée j'ai eu était de simplement utiliser le module à l'échelle de variables:

cache = {}

def some_function():
    cache['foo'] = "bar"

Mais il semble que ces réinitialisés à chaque requête.

Comment faire cela correctement?

Edit: Flacon 10.1

  • Avez-vous vérifié Flacon-Cache?
  • Non, merci pour le lien, mais c'est une tâche simple que j'aimerais garder le dependenies faible atm.
  • Je pense que je suis allé avec un cookie de navigateur à la fin. Mais vous êtes bien sûr les bienvenus pour poster une solution une fois que vous trouver un.
  • Session pourrait être une solution, mais la session est conservée par l'utilisateur de sorte qu'il a ses limites. L'autre option est de memcache. C'est simple touche->mémorisation de la valeur qui est facile à configurer et est partagé entre tous les threads et les processus. Cependant, parfois (comme dans mon cas), il est un peu trop de complication, donc je pense simplement utiliser le dictionnaire dans la portée globale. Le risque est de l'intégrité des données (pas un facteur pour moi), mais même dict sera partagée entre les processus.
InformationsquelleAutor Profpatsch | 2013-10-09