gpt4 book ai didi

python - 如何在 flask 中使用 g.user global

转载 作者:IT老高 更新时间:2023-10-28 20:25:01 25 4
gpt4 key购买 nike

据我了解 Flask 中的 g 变量,它应该为我提供一个全局位置来存储数据,例如在登录后保存当前用户。这是正确的吗?

我希望我的导航在登录后在整个网站上显示我的用户名。

我的观点包含

from Flask import g #among other things

在登录时,我分配

user = User.query.filter_by(username = form.username.data).first()
if validate(user):
session['logged_in'] = True
g.user = user

我似乎无法访问 g.user。相反,当我的 base.html 模板具有以下...

<ul class="nav">
{% if session['logged_in'] %}
<li class="inactive">logged in as {{ g.user.username }}</li>
{% endif %}
</ul>

我得到错误:

jinja2.exceptions.UndefinedError
UndefinedError: 'flask.ctx._RequestGlobals object' has no attribute 'user'

否则登录工作正常。我错过了什么?

最佳答案

gthread local并且是每个请求(见 A Note On Proxies )。 session 也是一个本地线程,但在默认上下文中被持久化为 MAC 签名的 cookie 并发送到客户端。

您遇到的问题是 session 在每个请求上重建(因为它被发送到客户端并且客户端将其发送回给我们),而 上的数据集g 仅在 this 请求的生命周期内可用。

要做的最简单的事情(注意 simple != secure - 如果您需要安全,请查看 Flask-Login)是简单地将用户的 ID 添加到 session 并在每个请求上加载用户:

@app.before_request
def load_user():
if session["user_id"]:
user = User.query.filter_by(username=session["user_id"]).first()
else:
user = {"name": "Guest"} # Make it better, use an anonymous User instead

g.user = user

关于python - 如何在 flask 中使用 g.user global,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com