Я пишу приложение, которое подключается к базе данных. Я хочу создать это соединение db один раз, а затем повторно использовать это соединение на протяжении всего срока службы приложения.
Я также хочу аутентифицировать пользователей. Пользователь auth будет жить только для жизни запроса.
Как я могу различать объекты, хранящиеся для жизни флеш-приложения, в отличие от конкретного запроса? Где я могу их хранить, чтобы все модули (и последующие чертежи) имели к ним доступ?
Вот пример приложения:
from flask import Flask, g
app = Flask(__name__)
@app.before_first_request
def setup_database(*args, **kwargs):
print 'before first request', g.__dict__
g.database = 'DATABASE'
print 'after first request', g.__dict__
@app.route('/')
def index():
print 'request start', g.__dict__
g.current_user = 'USER'
print 'request end', g.__dict__
return 'hello'
if __name__ == '__main__':
app.run(debug=True, port=6001)
Когда я запустил это (Flask 0.10.1) и переместился к http://localhost:6001/
, вот что отображается в консоли:
$ python app.py
* Running on http://127.0.0.1:6001/
* Restarting with reloader
before first request {}
after first request {'database': 'DATABASE'}
request start {'database': 'DATABASE'}
request end {'current_user': 'USER', 'database': 'DATABASE'}
127.0.0.1 - - [30/Sep/2013 11:36:40] "GET / HTTP/1.1" 200 -
request start {}
request end {'current_user': 'USER'}
127.0.0.1 - - [30/Sep/2013 11:36:41] "GET / HTTP/1.1" 200 -
Таким образом, первый запрос работает как ожидалось: flask.g
хранит мою базу данных, и когда запрос начинается, он также имеет мою информацию о пользователе.
Однако, по моему второму запросу, flask.g очищается! Моя база данных нигде не найдена.
Теперь я знаю, что flask.g используется для применения только к запросу. Но теперь, когда он привязан к приложению (начиная с 0.10), я хочу знать, как связывать переменные со всем приложением, а не только с одним запросом.
Что мне не хватает?
edit: Я специально интересуюсь MongoDB - и в моем случае поддерживаю соединения с несколькими базами данных Mongo. Могу ли я просто создать эти соединения в __init__.py
и повторно использовать эти объекты?