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

Posted

技术标签:

【中文标题】webpy中的会话-在所有类中获取用户名【英文标题】:session in webpy - getting username in all classes 【发布时间】:2011-11-15 00:32:06 【问题描述】:

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

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

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

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'

【问题讨论】:

【参考方案1】:

我在我的 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

我还在初始化器字典中做了一个小改动,将用户初始化为匿名,登录为假。 感谢 Andrey 为我提供线索。

【讨论】:

【参考方案2】:

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

【讨论】:

感谢 Andrey 的建议.. 3 天后我终于得到了解决方案..! @Unni,不客气!开始使用 webpy 时,我遇到了完全相同的问题。

以上是关于webpy中的会话-在所有类中获取用户名的主要内容,如果未能解决你的问题,请参考以下文章

从 laravel 中的一个后缀获取所有会话

获取用户会话列表 SQL Redshift

检查用户代理并在会话类中重新生成会话 ID

如何使用Webpy进行数据库或表锁定

使用带有用户名和密码的 cassia 获取会话

在 PHP 中循环遍历所有服务器的会话