15

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

@ app.before_requestのapp.pyに入れてみましたが、session、g、Userをインポートする必要があるためエラーが発生し、それでも他の場所で_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'
4

4 に答える 4

18

Blueprint.before_requestブループリント内の各リクエストの前に呼び出されます。すべてのブループリントの前に呼び出したい場合は、before_app_requestを使用してください。

于 2013-04-20T14:18:59.900 に答える
17

ここで少し遅れますが:
これが私が行うことです:
Blueprint変数を使用してbeforeリクエストを設定します

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

def before_myblueprint():
    #code here

myblueprint.before_request(before_myblueprint)
于 2013-08-27T12:20:48.617 に答える
6

私はさらに後でここにいますが、ジョンストンの答えを増やして、同じbefore_requestデコレータを使用することもできます。たとえば、次のようになります。

bp_v1 = Blueprint('api_v1', __name__)

@bp_v1.before_request
def before_anything():
    pass
于 2017-04-13T23:57:27.000 に答える
2

でユーザーを開始してみることでうまくいくと思います。before_request問題はg、リクエストの前にオブジェクトが何もないということです。そのため、別の方法で処理する必要があります。ほとんどの場合、ユーザーをCookieから取得し、before_request後でそれをセッションに追加しgます。Flask-loginを確認または使用する価値があると思います。または、そのコードを読むだけで、いくつかのアイデアが得られるかもしれません。

于 2012-12-01T09:34:28.600 に答える