我想设置一个全局变量并将其用作各种函数的触发器。每个用户都有一个单独的全局变量。这用于跟踪以前的消息数据并继续对话。问题是如何为每个用户管理单独的全局变量?一旦我在服务器中部署该应用程序,该应用程序就会运行。当我尝试更改全局变量时,此变量适用于每个用户,而不仅仅是触发更改的单个用户。
我正在使用没有数据库的蟒蛇烧瓶。
谢谢。
你不需要全局变量,真正地说,你将来任何时候都不需要它们,因为使用全局变量是一种不好的做法。详见此链接,为什么全局变量是邪恶的?
现在谈到您的问题,您可能需要g
烧瓶模块,该模块创建一个上下文,该上下文在来自同一用户的多个请求中持续存在。你可以做这样的事情:
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
但它将持续存在来自同一用户的多个请求。希望对您有所帮助!
编辑:g
对象是应用程序上下文的代理,不会在多个请求中保留。它针对整个应用程序中的单个请求持久存在。
不确定我是否正确理解了您的问题,但也许您可以创建一个全局字典,将 key 作为用户名,值作为消息。
因此,每次要更新字典中的变量时,都可以根据用户名(字典的键)访问相应的变量
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"}