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