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()