如何在python烧瓶中设置一个全局变量?
我想设置一个全局变量,并把它作为各种功能的触发器。每个用户都有一个单独的全局变量。这用于跟踪以前的消息数据并进行对话。问题是如何为每个用户管理一个单独的全局变量?应用程序在我将其部署到服务器后运行。当我尝试更改全局变量时,此变量适用于每个用户,而不仅仅是触发其更改的单个用户。如何在python烧瓶中设置一个全局变量?
我使用python瓶没有DB。
谢谢。
你并不需要一个全局变量,这和真正地说,你将来不需要它们,因为使用全局变量是一种不好的做法。请参阅此链接的详细信息,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
,但它会持续了来自同一用户的多个请求。希望能帮助到你!
谢谢!这完美地解决了我的问题。 –
不客气! –
不知道如果我正确理解你的问题,但也许你可以创建一个全球性的词典与键作为用户名和值的消息。
所以每次要更新在字典中的变量,您可以根据用户名(字典的键)访问各自的变量
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"}
谢谢你的回答! –
“全球通”和“每用户”是两个完全不同的事情。 –
你应该寻找的关键词是“会话”。 –