2017-09-03 1 views
0

Je voudrais définir une variable globale et l'utiliser comme déclencheur de diverses fonctions. Chaque utilisateur a une variable globale distincte. Ceci est utilisé pour garder une trace des données de message précédentes et engager une conversation. Le problème est que comment puis-je gérer une variable globale séparée pour chaque utilisateur? L'application est en cours d'exécution une fois que je l'ai déployée sur le serveur. Lorsque j'essaie de modifier la variable globale, cette variable s'applique à chaque utilisateur, pas seulement à l'utilisateur qui a déclenché la modification. J'utilise un flacon python sans DB.Comment définir une variable globale dans un flacon python?

Merci.

+0

"Global" et "par utilisateur" sont deux choses complètement différentes. –

+0

Le mot clé que vous devriez rechercher est "session". –

Répondre

0

Vous n'avez pas besoin d'une variable globale pour cela et En vérité, vous n'en aurez pas besoin à l'avenir car c'est une mauvaise pratique d'utiliser des variables globales. Référez-vous à ce lien pour plus de détails, why are global variables evil?

Maintenant à venir à votre problème, vous avez probablement besoin de g module de flacon qui crée un contexte qui persistent sur plusieurs demandes du même utilisateur. Vous pouvez faire quelque chose comme ceci:

from flask import g 

... 

def get_messages(): 
    messages = getattr(g, '_messages', None) 
    if messages is None: 
     g._messages = [] # to store messages you may use a dictionary 

    return g._messages 

def add_message(message): 
    messages = get_messages() 
    messages.append(message) 
    setattr(g, '_messages', messages) 
    return messages 

Et rappelez-vous pour chaque utilisateur un thread différent de l'application est créée de sorte que les ni les variables sont partagées ni leurs valeurs. Donc, pour chaque utilisateur, il y aura un g différent mais il persistera sur plusieurs requêtes du même utilisateur. J'espère que cela aide!

+0

Merci! Cela a résolu mon problème parfaitement. –

+0

De rien! –

1

Je ne sais pas si je comprends bien votre question, mais peut-être que vous pouvez créer un dictionnaire global avec la clé comme nom d'utilisateur et valeur comme message.

Donc, chaque fois que vous voulez mettre à jour la variable dans le dictionnaire, vous pouvez accéder à la variable correspondante en fonction du nom d'utilisateur (clé du dictionnaire)

userMsg = {"John":"hello"} #existing user 
# update John's msg 
userMsg["John"] = "bye" 
# now userMsg is {"John":"bye"} 

# add new user if user does not exist 
userMsg["Mary"] = "Your Message Here" 
# now userMsg is {"John":"bye", "Mary":"Your Message Here"} 
+0

Merci pour votre réponse! –