2012-12-01 11 views
7

私は私のユーザモジュールのためのルーティングの前のリクエストを持っています。しかし今、私は他の青写真からg.usersにアクセスしたい。私はそれを行う唯一の方法を見つけました、すべての単一の青写真に以下のコードをコピーすることです。どこに私の青写真before_requestを置くのですか

@ app.before_requestのために私のapp.pyに入れてみましたが、セッション、g、ユーザをインポートする必要があるためエラーがあります。そして、他の場所でも_requestglobalエラーが発生します。

@app.before_request 
def before_request(): 
    g.user = None 
    if 'user_id' in session: 
    g.user = User.query.get(session['user_id']); 

何を入れ​​るのが最適ですか?

が、私はたくさんの取得:

AttributeError: '_RequestGlobals' object has no attribute 'user' 
+1

「app.before_request' *はすべきです」など、同じbefore_requestデコレータを使用することもできます。 'app.before_request'を使うときに' AttributeError'を得る場所の例を投稿できますか? –

+0

ダミーニット、明らかに、私は@アプリでそれを設定しなかった、私は機能を追加しましたが、それを忘れてしまった。これで、すべての単一の青写真で@appでうまくいくように見えます。私は他の青写真はそれを見ていないと思った。 – Dexter

答えて

3

私はあなたがbefore_requestでユーザーを開始しようとすることで、それはいいやって考えると、あなたが違っそれに対処する必要があるので、問題は、gオブジェクトは、要求の前に何も持っていないということです。おそらくbefore_requestのCookieからユーザーを取得してから、後でセッションに追加します。おそらく、gになります。私はFlask-loginを見てみる価値があると思います。またはread the codeのそれだけで、それはあなたにいくつかのアイデアを与えるでしょう。

+0

私はそれを探していました。しかし、私はフラスコがセッションデータを保存するための自動クッキーを作成していると考えたので、なぜそれが必要なのか分かりません。 – Dexter

8

青写真の各要求の前に、Buleprint.before_requestが呼び出されます。すべての青写真の前に電話したい場合は、before_app_requestを使ってください。

13
少し遅れて、ここで

しかし:
これは私が何をすべきかです:
要求の前に

myblueprint = Blueprint('myblueprint', __name__, template_folder="templates") 

def before_myblueprint(): 
    #code here 

myblueprint.before_request(before_myblueprint) 
1

を設定する青写真変数を使用して私も後でここだけど、ジョンストンの答えにインクリメント

bp_v1 = Blueprint('api_v1', __name__) 

@bp_v1.before_request 
def before_anything(): 
    pass 
関連する問題