所以我有我的用户模块的请求路由。但是现在我想从其他蓝图中访问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'
答案 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