2017-09-03 103 views
0

我想设置一个全局变量,并把它作为各种功能的触发器。每个用户都有一个单独的全局变量。这用于跟踪以前的消息数据并进行对话。问题是如何为每个用户管理一个单独的全局变量?应用程序在我将其部署到服务器后运行。当我尝试更改全局变量时,此变量适用于每个用户,而不仅仅是触发其更改的单个用户。如何在python烧瓶中设置一个全局变量?

我使用python瓶没有DB。

谢谢。

+0

“全球通”和“每用户”是两个完全不同的事情。 –

+0

你应该寻找的关键词是“会话”。 –

回答

0

你并不需要一个全局变量,这和真正地说,你将来不需要它们,因为使用全局变量是一种不好的做法。请参阅此链接的详细信息,why are global variables evil?

现在来到您的问题,您可能需要g flask的模块,它会创建一个上下文,该上下文会持续来自同一用户的多个请求。你可以做这样的事情:

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 

记住了创建应用程序的不同的线程,因此无论是变量共享的每个用户,也没有他们的价值观。因此,对于每个用户都会有一个不同的g,但它会持续了来自同一用户的多个请求。希望能帮助到你!

+0

谢谢!这完美地解决了我的问题。 –

+0

不客气! –

1

不知道如果我正确理解你的问题,但也许你可以创建一个全球性的词典与键作为用户名和值的消息。

所以每次要更新在字典中的变量,您可以根据用户名(字典的键)访问各自的变量

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

谢谢你的回答! –