【发布时间】:2013-06-24 20:50:58
【问题描述】:
我正在尝试从 web.py 食谱中复制并使用示例“使用 PostgreSQL 数据库进行用户身份验证”。我不知道为什么会出现以下错误。
在 /login 'ThreadedDict' 对象没有属性 'login'
在 /login 'ThreadedDict' 对象没有属性'privilege'
这是第二个错误的错误输出到终端。 (第一个几乎相同)
回溯(最近一次通话最后): 文件“/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py”,第 239 行,正在进行中 返回 self.handle() 文件“/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py”,第 230 行,在句柄中 返回 self._delegate(fn, self.fvars, args) _delegate 中的文件“/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py”,第 420 行 返回句柄类(cls) 文件“/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py”,第 396 行,在 handle_class 返回调用(*args) 文件“/home/erik/Dropbox/Python/Web.py/Code.py”,第 44 行,在 GET 渲染 = create_render(session.privilege) 文件“/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/session.py”,第 71 行,在 __getattr__ 返回 getattr(self._data, name) AttributeError:“ThreadedDict”对象没有属性“特权” 127.0.0.1:36420 - - [25/Aug/2012 01:12:38] “HTTP/1.1 GET /login” - 500 内部服务器错误这是我的 code.py 文件。几乎是从食谱上剪下来的。我尝试将所有类和 def 放在主代码之上。如另一篇文章所述,我还尝试使用 sudo 启动 python。
导入网页 班级指数: 定义获取(自我): todos = db.select('todo') 返回 render.index(todos) 类添加: def POST(自我): i = web.input() n = db.insert('todo', title=i.title) raise web.seeother('/') 定义记录(): return False #我添加这个来测试错误 #1,现在我得到错误 #2 #if session.login==1: # 返回真 #别的: # 返回错误 def create_render(特权): 如果记录(): 如果特权 == 0: 渲染 = web.template.render('模板/阅读器') elif 特权 == 1: 渲染 = web.template.render('模板/用户') elif 特权 == 2: 渲染 = web.template.render('模板/管理员') 别的: 渲染 = web.template.render('templates/communs') 别的: 渲染 = web.template.render('templates/communs') 返回渲染 班级登录: 定义获取(自我): 如果记录(): 渲染 = create_render(session.privilege) return '%s' % render.login_double() 别的: # 这是错误#2的地方 渲染 = create_render(session.privilege) return '%s' % render.login() def POST(自我): 名称,密码 = web.input().name,web.input().passwd ident = db.select('users', where='name=$name', vars=locals())[0] 尝试: 如果 hashlib.sha1("sAlT754-"+passwd).hexdigest() == ident['pass']: session.login = 1 session.privilege = ident['特权'] 渲染 = create_render(session.privilege) 返回 render.login_ok() 别的: session.login = 0 session.privilege = 0 渲染 = create_render(session.privilege) 返回 render.login_error() 除了: session.login = 0 session.privilege = 0 渲染 = create_render(session.privilege) 返回 render.login_error() 类重置: 定义获取(自我): session.login = 0 session.kill() 渲染 = create_render(session.privilege) 返回render.logout() #web.config.debug = 假 render = web.template.render('templates/', base='layout') 网址 = ( '/', '指数', '/添加', '添加', '/登录', '登录', '/重置', '重置' ) app = web.application(urls, globals()) db = web.database(dbn='postgres', user='hdsfgsdfgsd', pw='dfgsdfgsdfg', db='postgres', host='fdfgdfgd.com') 存储 = web.session.DiskStore('会话') # 对我来说,这似乎被忽略了,至少是“初始化器”部分 session = web.session.Session(app, store, initializer={'login': 0, 'privilege': 0}) 如果 __name__ == "__main__": app.run()【问题讨论】:
标签: python session login web.py