データベースに接続するアプリケーションを作成しています。そのデータベース接続を一度作成してから、アプリケーションの存続期間中その接続を再利用したいと考えています。
また、ユーザーを認証したいと考えています。ユーザーの認証は、リクエストの存続期間中のみ存続します。
フラスコアプリの存続期間中に保存されたオブジェクトと、リクエストに固有のオブジェクトを区別するにはどうすればよいですか? すべてのモジュール (および後続のブループリント) がそれらにアクセスできるようにするには、それらをどこに保存しますか?
これが私のサンプルアプリです:
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
ています。データベースを保持しており、リクエストが開始されると、ユーザーの情報も含まれています。
しかし、私の 2 回目のリクエストで、flask.g は完全に削除されました。私のデータベースがどこにも見つかりません。
今、flask.gがリクエストのみに適用されていたことがわかりました。しかし、(0.10 の時点で) アプリケーションにバインドされたので、単一の要求だけでなく、アプリケーション全体に変数をバインドする方法を知りたいです。
私は何が欠けていますか?
編集:私は特に MongoDB に興味があります。私の場合は、複数の Mongo データベースへの接続を維持しています。__init__.py
それらの接続を作成してそれらのオブジェクトを再利用するのが私の最善の策ですか?