webpy中的会话 - 在所有类中获取用户名

时间:2011-09-12 02:58:27

标签: python session post web.py

我正在为我的项目使用webpy框架。我从main.py程序的“登录”类登录。我想在其他课程中获取用户名。我尝试了会话并试验了很长时间。我已经实现了如下的会议。

store = web.session.DiskStore('sessions')
session = web.session.Session(app,store,initializer={'login': 0,'privilege': 0})

在我的main.py登录类中,当用户提交用户名和密码时,以下代码将起作用。(这是我登录类的post方法)。

class login:
    def POST(self):
            i = web.input(form_submit="Login")
            authdb = sqlite3.connect('database/users.db')
            conn = authdb.cursor()
            if i.form_submit=='Login':
                check = conn.execute('select * from user_details where username=?and password=?', (i.username, i.password))
                n=check.fetchall()
                if len(n)!=0:
                        session.loggedin = True
                        session.username = i.username
            return render.home('Home')
                else: return render.display('Wrong username or password !')

我想在其他课程中获取用户名。我尝试使用session.username访问用户名,但它显示以下错误。 AttributeError: 'ThreadedDict' object has no attribute 'username'

2 个答案:

答案 0 :(得分:3)

我在main.py程序中进行了以下更改。

所做的更改:而不仅仅是给予

session = web.session.Session(app,store,initializer={'login': 0,'privilege': 0,'user':'anonymous','loggedin':False}) 

我添加了以下代码行,

if web.config.get('_session') is None:
    session = web.session.Session(app,store,initializer={'login': 0,'privilege': 0,'user':'anonymous','loggedin':False})
    web.config._session = session
else:
    session = web.config._session

我还对initilizer字典进行了一些小改动,初始化用户为匿名用户,登录为false。 感谢安德烈给我的线程。

答案 1 :(得分:2)

只需在会话loggedin username中提供initializerdict的默认值即可。当未设置这些属性时(即,当用户未登录时)并且您尝试访问它们时,似乎会出现错误。