2013-05-09 50 views
11

Flask中有應用程序範圍的python變量嗎?我想在用戶之間實現一些原始消息傳遞,並共享數據緩存。當然,可以通過數據庫實現這一點,但我想知道也許有一個無數據庫,也許更快的方法。理想情況下,如果共享變量是一個活的python對象,但我的需求也會滿足字符串和整數。Flask中的應用程序變量?

編輯:補充了(非工作)例如

from flask import g 

@app.route('/store/<name>') 
def view_hello(name=None): 
    g.name = name 
    return "Storing " + g.name 

@app.route("/retrieve") 
def view_listen(): 
    n = g.name 
    return "Retrieved: " + n 

在試圖檢索g.name,這會觸發錯誤: AttributeError的: '_RequestGlobals' 對象有沒有屬性 '名'

回答

-6

由於燒瓶0.10 flask.g將是要走的路。

在早期版本中,flask.g存儲在請求上下文中,並在請求之間被清除。如果您使用的是舊版本,你應該商店中的應用層次的東西在flask.current_app

+3

該文件說'flask.g'是一個特殊的對象,確保它只對活動請求有效,並且會爲每個請求返回不同的值。顯然這不是這個問題的正確答案。 – ShuaiYuan 2014-11-23 16:12:37

3

我不確定這是否是一個好主意或沒有,但我一直在使用這要求之間輕鬆共享數據:

class MyServer(Flask): 

    def __init__(self, *args, **kwargs): 
      super(MyServer, self).__init__(*args, **kwargs) 

      #instanciate your variables here 
      self.messages = [] 

app = MyServer(__name__) 

@app.route("/") 
def foo(): 
    app.messages.append("message") 
+1

此方法假定它是請求之間共享的相同應用程序對象,並且它永不死亡。我非常肯定,這並不適用於比構建在Flask框架內的簡單開發Web服務器更復雜的場景。 – Passiday 2014-11-17 13:07:13

+1

是的,你是對的。不過,對於非常小的簡單應用程序來說,它是共享數據的簡單方法。 – 2014-11-17 16:04:00