Python 在你提出要求之前,我应该把我的蓝图放在哪里

Python 在你提出要求之前,我应该把我的蓝图放在哪里,python,flask,Python,Flask,因此,我有我的用户模块的前请求路由。但现在我也想从其他蓝图中访问g.users。我发现唯一的方法就是把下面的代码复制到每个蓝图上 我尝试将它放在我的app.py for@app.before_request中,但随后出现了错误,因为您必须导入session、g、User,然后在其他地方仍然会出现_requestglobal错误 @app.before_request def before_request(): g.user = None if 'user_id' in session:

因此,我有我的用户模块的前请求路由。但现在我也想从其他蓝图中访问g.users。我发现唯一的方法就是把下面的代码复制到每个蓝图上

我尝试将它放在我的app.py for@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'

我认为您可以在请求之前尝试在
中启动用户,问题是
g
对象在请求之前没有任何内容,因此您需要以不同的方式处理它。最有可能在请求之前从
中的cookies中获取用户,然后将其添加到会话中,从那里可能添加到
g
。我认为值得一看或使用它。或者只是它的一部分,也许它会给你一些想法。

Blueprint.before\u request
在Blueprint中的每个请求之前被调用。如果您想在所有蓝图之前调用它,请使用。

此处稍晚一点,但:
我就是这么做的:
使用Blueprint变量设置before请求

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

def before_myblueprint():
    #code here

myblueprint.before_request(before_myblueprint)

我在这里更晚了,但随着约翰斯顿答案的增加,您也可以在请求前使用相同的
装饰器,例如:

bp_v1 = Blueprint('api_v1', __name__)

@bp_v1.before_request
def before_anything():
    pass

app.before\u请求
应该可以工作。你能举一个例子,当你使用
应用程序时,你会在那里得到
属性错误
。在你请求之前
?该死的,显然,我没有在@app中正确设置它,我添加了这个函数,但忘了使用它。现在它似乎可以在每个蓝图中与@app配合使用。我想其他的蓝图也看不到。@德克斯特,请考虑更新你的“被接受的答案”!(我发现imwilsonxu的那本书最有用)我一直在研究这个问题。但我不明白为什么需要它,因为我认为flask已经创建了一个自动cookie来保存会话数据。我相信这是最好的答案。