web.pyクックブックから「PostgreSQLデータベースを使用したユーザー認証」の例をコピーして使用しようとしています。次のエラーが発生する理由がわかりません。
/login で 'ThreadedDict' オブジェクトに属性 'login' がありません
/login で 'ThreadedDict' オブジェクトに属性 'privilege' がありません
2 番目のエラーの端末へのエラー出力を次に示します。(最初はほぼ同じ)
トレースバック (最新の呼び出しが最後): ファイル「/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行目、ハンドル return self._delegate(fn, self.fvars, args) ファイル "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py"、420 行目、_delegate 内 戻りハンドルクラス (cls) ファイル "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py"、396 行目、handle_class 内 return tocall(*args) ファイル「/home/erik/Dropbox/Python/Web.py/Code.py」、44 行目、GET render = create_render(session.privilege) ファイル "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/session.py"、71 行目、__getattr__ 内 return getattr(self._data, name) AttributeError: 'ThreadedDict' オブジェクトには属性 'privilege' がありません 127.0.0.1:36420 - - [2012 年 8 月 25 日 01:12:38] "HTTP/1.1 GET /login" - 500 内部サーバー エラー
これが私のcode.pyファイルです。クックブックからのカットアンドペーストです。すべてのクラスと定義をメイン コードの上に置いてみました。また、別の投稿で述べたように、sudo を使用して python を起動しようとしました。
ウェブをインポート クラス インデックス: デフGET(自己): todos = db.select('todo') render.index(todos) を返す クラス追加: デフポスト(自己): i = web.input() n = db.insert('todo', title=i.title) web.seeother('/') を上げる デフログ(): return False #これをテスト エラー #1 に追加しましたが、エラー #2 が発生します #if session.login==1: # 真を返す #そうしないと: # 偽を返す def create_render(権限): 記録された場合(): 特権 == 0 の場合: render = web.template.render('テンプレート/リーダー') elif 特権 == 1: render = web.template.render('テンプレート/ユーザー') elif 特権 == 2: render = web.template.render('テンプレート/管理者') そうしないと: render = web.template.render('templates/communs') そうしないと: render = web.template.render('templates/communs') レンダーを返す クラスログイン: デフGET(自己): 記録された場合(): render = create_render(session.privilege) return '%s' % render.login_double() そうしないと: # これがエラー #2 の場所です render = create_render(session.privilege) return '%s' % render.login() デフポスト(自己): name, passwd = web.input().name, web.input().passwd ident = db.select('users', where='name=$name', vars=locals())[0] 試す: もし hashlib.sha1("sAlT754-"+passwd).hexdigest() == ident['pass']: セッション。ログイン = 1 session.privilege = ident['特権'] render = create_render(session.privilege) render.login_ok() を返す そうしないと: セッション。ログイン = 0 セッション。特権 = 0 render = create_render(session.privilege) render.login_error() を返す を除外する: セッション。ログイン = 0 セッション。特権 = 0 render = create_render(session.privilege) render.login_error() を返す クラスのリセット: デフGET(自己): セッション。ログイン = 0 session.kill() render = create_render(session.privilege) render.logout() を返す #web.config.debug = False render = web.template.render('templates/', base='layout') URL = ( '/'、 '索引'、 「/追加」、「追加」、 「/ログイン」、「ログイン」、 「/リセット」、「リセット」 ) app = web.application(urls, globals()) デシベル = web.database (dbn = 'postgres'、ユーザー = 'hdsfgsdfgsd'、pw = 'dfgsdfgsdfg'、db = 'postgres'、ホスト = 'fdfgdfgd.com') store = web.session.DiskStore('セッション') #あまりにも、これは無視されているようです、少なくとも「初期化子」の部分 セッション = web.session.Session(アプリ、ストア、イニシャライザー={'ログイン': 0、'特権': 0}) if __name__ == "__main__": app.run()