我正在使用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
答案 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'])