我在哪里把我的蓝图放在before_request之前

Dex*_*ter 10 python flask

所以我有我的用户模块的请求路由.但是现在我想从其他蓝图中访问g.users.我找到了唯一的方法,就是将下面的代码复制到每个蓝图中.

我尝试将它放在我app.py中的@ app.before_request中,但是你有错误,因为你必须导入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']);
Run Code Online (Sandbox Code Playgroud)

什么是最好的地方?

我得到了很多:

AttributeError: '_RequestGlobals' object has no attribute 'user'
Run Code Online (Sandbox Code Playgroud)

Joh*_*ton 13

这里有点晚了但是:
这就是我所做的:
使用Blueprint变量来设置before请求

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

def before_myblueprint():
    #code here

myblueprint.before_request(before_myblueprint)
Run Code Online (Sandbox Code Playgroud)


imw*_*nxu 10

在蓝图中的每个请求之前调用Buleprint.before_request.如果您想在所有蓝图之前调用它,请使用before_app_request.

  • 我相信这是最好的答案。 (2认同)

小智 5

我什至更晚到这里,但增加约翰斯顿的答案,您也可以使用相同的before_request装饰器,例如:

bp_v1 = Blueprint('api_v1', __name__)

@bp_v1.before_request
def before_anything():
    pass
Run Code Online (Sandbox Code Playgroud)