【问题标题】:Webpy sessions: AttributeError: 'ThreadedDict' object has no attribute 'username'Webpy 会话:AttributeError:“ThreadedDict”对象没有属性“用户名”
【发布时间】:2011-12-22 22:12:44
【问题描述】:

我正在使用 web.py 在 python 中创建一个 webapp,我已经设置了表格并且可以登录用户和所有内容,但是会话的初始化程序似乎不起作用。

我的代码中有以下内容:

store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})

render = web.template.render('templates/', base='base', globals={'session': session, 'username': session.username})

但这会引发错误: AttributeError: 'ThreadedDict' 对象没有属性 'username'

可以做什么?我基本上只是按照这里的例子:
http://webpy.org/cookbook/sessions

【问题讨论】:

    标签: python web.py


    【解决方案1】:

    只有在处理请求时才会加载会话,在设置​​过程中无法获取其属性。

    【讨论】:

    • 所以我想通了,但它现在可以工作了,只是不要问我如何大声笑,因为我不知道。此外,我必须覆盖默认的 web.py 会话类,以使会话对整个域都是全局的,而不是每个唯一的 url 都有自己的会话 cookie,这对我来说真的没有意义。
    • 您不必为此目的子类化 Session,只需设置会话参数:web.config.session_parameters.update(cookie_name="tasty_cookie", cookie_domain="mydomain.com")
    • 域是一回事,路径是另一回事,它是设置为例如的路径。 // 用于 index/login/ 用于 login 等等,因此会话 cookie 根本无法使用。我只是将路径静态设置为"/",它突然就像一个魅力
    【解决方案2】:

    我遇到了同样的问题,所以我使用了 _initializer 属性来获取会话数据。

    这是一个例子:

    store = web.session.DBStore(db, 'sessions')
    session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})
    
    session_data = session._initializer
    render = web.template.render('templates/', base='base', globals={'session': session_data, 'username': session_data['username']})
    

    然后您可以从会话访问您在初始化程序中声明的所有数据。如果有人有更好的方法,请告诉我。

    PS:我知道已经晚了,但迟到总比不...

    【讨论】:

    • 这是一个很好的解决方案。像这样获取会话变量: session_data['logged_in'] - 感谢 Antonis。
    【解决方案3】:

    您正在尝试在设置会话变量之前获取它。

    我注意到session.username 在某些情况下有效。但是在 WSGI 下它失败了。

    这很好用,并且在 webpy 文档中:

    session.get('username', False)

    不是:

    session.username

    如果您想在初始化程序中使用预设,请使用@Antonis-kalou 答案中的方法。

    session_data = session._initializer
    session.get('username', session_data['username'])
    

    【讨论】:

    • @Antonis-kalou 查看更多信息。 3 年后 - 但我刚刚遇到了这个问题,所以我想它仍然相关。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-03-15
    • 2020-03-26
    • 1970-01-01
    • 2021-01-29
    • 2021-11-20
    • 2017-11-30
    相关资源
    最近更新 更多