2017-09-03 96 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

謝謝你的回答! –