【问题标题】:web.py User Authentication with PostgreSQL database example使用 PostgreSQL 数据库示例进行 web.py 用户身份验证
【发布时间】:2013-06-24 20:50:58
【问题描述】:

我正在尝试从 web.py 食谱中复制并使用示例“使用 PostgreSQL 数据库进行用户身份验证”。我不知道为什么会出现以下错误。

  1. 在 /login 'ThreadedDict' 对象没有属性 'login'

  2. 在 /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


    【解决方案1】:

    好的,我能够弄清楚我做错了什么。全部新手资料和学习过程的所有部分。这段代码现在可以正常工作,而且大部分时间都很好。我坚持的部分现在正在工作。在代码中查看我的 cmets

    谢谢

    导入网页 web.config.debug = 假 render = web.template.render('templates/', base='layout') 网址 = ( '/', '指数', '/添加', '添加', '/登录', '登录', '/重置', '重置' ) app = web.application(urls, globals()) db = web.database(废话,废话,废话) 存储 = web.session.DiskStore('会话') session = web.session.Session(app, store, initializer={'login': 0, 'privilege': 0}) 班级指数: 定义获取(自我): todos = db.select('todo') 返回 render.index(todos) 类添加: def POST(自我): i = web.input() n = db.insert('todo', title=i.title) raise web.seeother('/') 定义记录(): 如果 session.get('login', False): 返回真 别的: 返回假 def create_render(特权): 如果记录(): 如果特权 == 0: 渲染 = web.template.render('模板/阅读器') elif 特权 == 1: 渲染 = web.template.render('模板/用户') elif 特权 == 2: 渲染 = web.template.render('模板/管理员') 别的: 渲染 = web.template.render('templates/communs') 别的: ## 这行是关键,我没有 communs 文件夹,因此返回了一个不可用的对象 #render = web.template.render('templates/communs') #示例中的原始代码 render = web.template.render('templates/', base='layout') 返回渲染 班级登录: 定义获取(自我): 如果记录(): ## 使用 session.get('something') 代替 session.something 在不退出时不会爆炸 渲染 = create_render(session.get('privilege')) return '%s' % render.login_double() 别的: 渲染 = create_render(session.get('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.get('privilege')) 返回 render.login_ok() 别的: session.login = 0 session.privilege = 0 渲染 = create_render(session.get('privilege')) 返回 render.login_error() 除了: session.login = 0 session.privilege = 0 渲染 = create_render(session.get('privilege')) 返回 render.login_error() 类重置: 定义获取(自我): session.login = 0 session.kill() 渲染 = create_render(session.get('privilege')) 返回render.logout() 如果 __name__ == "__main__": app.run()

    【讨论】:

    • 嗨 Eman 我是 web 开发的新手,我最近开始使用 web.py 但无法弄清楚如何创建一个简单的登录页面,你能提供我你的模板和 .html 代码吗在您的帮助下,我可以理解基本的事情。我的全部意图是从数据库中创建简单的登录屏幕我的匹配详细信息。所以首先应该出现一个 html 登录屏幕模板,在输入用户详细信息后它应该重定向到下一页,我的疑问是在哪里创建模板页面代码以及如何在上面的代码中访问它
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多