我正在尝试从 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()