Переменные области применения в Flask?
Есть ли такая вещь, как переменные python для области приложения, в Flask? Я хотел бы реализовать некоторые примитивные сообщения между пользователями и общий кэш данных. Конечно, это можно реализовать через базу данных, но я хотел бы знать, может быть, есть db-бесплатный и, возможно, более быстрый подход. В идеале, если разделяемая переменная будет объектом live python, но мои потребности будут удовлетворены также строками и ints.
Изменить: дополнено (нерабочим) примером
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' не имеет атрибута 'name'
Ответы
Ответ 1
Я не уверен, что это хорошая идея или нет, но я использовал это, чтобы легко делиться данными между запросами:
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")
Ответ 2
Так как колба 0.10 flask.g
была бы способ пойти.
В более ранних версиях flask.g хранится в контексте запроса и очищается между запросами. Если вы используете более старую версию, вы должны хранить свой контент уровня приложения в flask.current_app