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

时间:2012-12-01 08:18:08

标签: 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']);

最好的地方是什么?

我得到了很多:

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

4 个答案:

答案 0 :(得分:13)

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

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

def before_myblueprint():
    #code here

myblueprint.before_request(before_myblueprint)

答案 1 :(得分:10)

在蓝图中的每个请求之前调用

Blueprint.before_request。如果您想在所有蓝图之前调用它,请使用before_app_request

答案 2 :(得分:2)

我认为你通过尝试在before_request中启动用户来做得很好,问题是g对象在请求之前没有任何内容,所以你需要以不同的方式处理它。最有可能从before_request中的cookie中获取用户,然后将其添加到会话中,从那里可能g。我认为值得一看或使用Flask-login。或者只是read the code它可能会给你一些想法。

答案 3 :(得分:2)

我甚至在这里稍后,但在增加约翰斯顿的答案时,你也可以使用相同的before_request装饰器,例如:

bp_v1 = Blueprint('api_v1', __name__)

@bp_v1.before_request
def before_anything():
    pass