2009-06-03 4 views
0

Voici mon problème. DJango continue de stocker tous les objets globaux après la première exécution d'un script. Par exemple, un objet que vous instanciez dans views.py globalement sera disponible jusqu'à ce que vous redémarriez le serveur d'applications. C'est bien sauf si votre objet est lié à une ressource externe qui peut expirer. Maintenant, la façon dont je pensais corriger était une sorte de méthode d'usine qui vérifie si l'objet est instancié et le crée si ce n'est pas le cas, puis le renvoie. Cependant, ceci échoue car l'objet existe depuis la dernière requête de page, donc une méthode usine renvoie toujours l'objet instancié lors de la première requête.Comment recharger les vars globaux à chaque rafraîchissement de page dans DJango

Ce que je cherche est un moyen de déclencher quelque chose à la demande. J'ai vu des façons de le faire en implémentant votre propre middleware, mais je pense que c'est exagéré. Est-ce que quelqu'un connaît des méthodes réservées ou d'autres déclencheurs par requête.

Répondre

6

Simple: n'utilisez pas d'objets globaux. Si vous voulez un objet dans la vue, instanciez-le à l'intérieur de la vue, pas comme global. De cette façon, il sera recueilli après la fin de la vue.

+2

Vous pouvez également utiliser la session pour les objets "globaux" (en réalité persistants) jusqu'à ce que l'utilisateur se déconnecte. –

+0

Il y a de bonnes utilisations pour les globals de module, mais vous devez vous assurer qu'ils sont immuables et valides tant que le serveur reste actif. –

+1

S'ils étaient immuables et valides tant que le serveur est en service, qu'est-ce qui vous empêche de le mettre dans settings.py? –

Questions connexes