2013-05-09 14 views
11

Czy istnieje coś takiego jak zmienne python o zakresie aplikacji w Flask? Chciałbym zaimplementować pewne podstawowe komunikaty między użytkownikami i pamięć podręczną współużytkowanych danych. Oczywiście można to zaimplementować za pośrednictwem bazy danych, ale chciałem wiedzieć, że istnieje podejście wolne od db i być może szybsze. Idealnie byłoby, gdyby zmienna dzielona byłby żywym obiektem python, ale moje potrzeby byłyby również spełnione przez ciągi znaków i int.Zmienne zakresu aplikacji w kolbie?

Edit: uzupełnione (nieprodukcyjnym) Przykład

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 

Na próbując odzyskać g.name, to wyzwala błąd: AttributeError: obiekt '_RequestGlobals' nie ma atrybutu 'name'

Odpowiedz

-6

Ponieważ kolba 0.10 flask.g byłaby drogą do zrobienia.

We wcześniejszych wersjach flask.g jest przechowywany w kontekście żądania i jest czyszczony między żądaniami. Jeśli korzystasz ze starszej wersji należy przechowywać rzeczy poziomu aplikacji w flask.current_app

+3

Dokument mówi, że 'flask.g' jest specjalnym obiektem, który zapewnia, że ​​jest poprawny tylko dla aktywnego żądania i które zwróci różne wartości dla każdego żądania. Oczywiście nie jest to właściwa odpowiedź na to pytanie. – ShuaiYuan

3

jestem pewien, czy to jest dobry pomysł, czy nie, ale używam tego, aby łatwo udostępniać dane pomiędzy żądaniami:

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

To podejście zakłada, że ​​jest to ten sam obiekt aplikacji, który jest dzielony między żądania i że nigdy nie umiera. Jestem pewien, że nie ma w bardziej złożonych scenariuszach niż prosty serwer WWW, który jest zbudowany w ramach Flask. – Passiday

+1

Tak, masz rację. W przypadku bardzo małych i prostych aplikacji jest to jednak łatwy sposób udostępniania danych. –