Webpy会话:AttributeError:'ThreadedDict'对象没有属性'username'

时间:2011-11-06 03:15:15

标签: python web.py

我正在使用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

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,所以我使用了_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:我知道它已经很晚了,但迟到了,从来没有......

答案 1 :(得分:2)

会话仅在处理请求时加载,在安装过程中无法获取其属性。

答案 2 :(得分:1)

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

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

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

session.get('username', False)

不是:

session.username

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

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