当前位置: 首页 > 面试题库 >

如何在Flask中使用g.user global

陆正德
2023-03-14
问题内容

据我了解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'

否则登录正常。我想念什么?


问题答案:

g是本地线程,并且是每个请求的内容(请参阅代理说明)。该session是还当地一个线程,但在默认情况下被保存到一个MAC-签署cookie,并发送给客户端。

你遇到的问题是,session每个请求都将重建该请求(因为该请求已发送给客户端,并且客户端将其发送回给我们),而设置的数据g仅在此请求的生命周期内可用。

在最简单的事情(注意simple != secure-如果你需要确保看看烧瓶登录)是简单地将用户的ID添加到会话,并加载每个请求的用户:

@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


 类似资料:
  • 问题内容: 好的,所以我已经安装了Flask,我想知道如何将MongoDB数据库与即将开始构建的Flask应用程序连接和使用。 问题答案: 我个人发现PyMongo库简单易用。 你首先需要导入并创建一个连接: 然后获取你的数据库实例和集合(表): 然后,你可以通过处理保存数据的JSON文档来操纵数据。他们的网站上有完整的示例。

  • 问题内容: 我试图用一个烧瓶形式的sqlalchemy请求的结果填充选择字段。 这是代码: 这是模板: 查看: 模型(仅粘贴了关联表和作者表,很多列都不用了) 我目前收到此错误: 我真正想要的是select字段显示作者姓名及其编号,然后将作者编号返回到应用程序(返回到头上名为“ add_author”的函数)。 问题答案: 你有两个问题: 正如肖恩·维埃拉(Sean Vieira)在回答中指出的那

  • 问题内容: 我已经像这样设置了Flask Restful: 我想在内部重定向到端点。 但是当我尝试这样做时: 我有一个例外。 问题答案: 你需要为网址的一部分指定一个值: 或者你可以使用,它需要资源:

  • 问题内容: 我正在尝试使用jquery提出跨源请求,但它一直被消息拒绝 XMLHttpRequest无法加载http:// …请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不能访问Origin…。 我正在使用flask,heroku和jquery 客户端代码如下所示: 在heroku方面,我正在使用flask,就像这样 问题答案: 当我部署到Heroku

  • 问题内容: 我已经安装了Apache服务器,并且正在通过mod_wsgi处理Flask响应。我已经通过别名注册了WSGI脚本: [httpd.conf] 我在上面的路径中添加了相应的WSGI文件: [/mnt/www/wsgi-scripts/service.wsgi] 我有一个简单的Flask Python测试脚本,提供了服务模块: [/mnt/www/wsgi-scripts/service.

  • 问题内容: 有人可以在Flask中共享有关如何访问MySQL数据库的示例代码吗?已经有文档显示了如何连接到sqlite,但是没有连接到MySQL。 提前非常感谢你 问题答案: