2

セッションを機能させることができなかったため、wiki が提供するこの単純なコード スニペットを実行しました。

import web
web.config.debug = False
urls = (
    "/count", "count",
    "/reset", "reset"
)
app = web.application(urls, locals())
session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'count': 0})

class count:
    def GET(self):
        session.count += 1
        return str(session.count)

class reset:
    def GET(self):
        session.kill()
        return ""

if __name__ == "__main__":
    app.run()

しかし、次のエラーが発生します。

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 237, in process
    return self.handle()
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 228, in handle
    return self._delegate(fn, self.fvars, args)
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 411, in _delegate
    return handle_class(cls)
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 387, in handle_class
    return tocall(*args)
  File "temp.py", line 12, in GET
    session.count += 1
  File "/usr/local/lib/python2.7/dist-packages/web/session.py", line 71, in __getattr__
    return getattr(self._data, name)
AttributeError: 'ThreadedDict' object has no attribute 'count'

webpy は 2.7.3 と互換性がありませんか? これをwebpyの内部Webサーバーで実行しています。Ubuntu 12.04 を使用しています。

4

4 に答える 4

3

session.count += 1に等しいsession.count = session.count + 1のでsession.count、これが機能するために存在する必要があります。

次のチェックを追加して機能させます。

if 'count' not in session:
    session.count = 0
session.count += 1

ドキュメントの非常に単純なセッションの単純な例にも示されている別の方法もあります。

try:
    s.click += 1
except AttributeError:
    s.click = 1
于 2012-05-17T12:31:17.433 に答える
0

試してみてください...ただし、それが最善の方法であるとは確信していません(まったくきれいではありません)。前述のように、Session コンストラクターは、セッションの変数を初期化する方法を提供します。

「非常に単純なセッションの単純な例」に頼ることができるかどうかはよくわかりません。

まず、さまざまな変数の目的についてほとんど説明がありません。たとえば、 *db_parameter* dict の目的は何ですか?

最後になりましたが、重大な更新が必要です。提供されたコードは、実際のフレームワークでは機能しませんでした。web.ctx.sessionはありません。

ちなみに、例のような簡単なカウンターを実装しました。表示されたエラーは、セッションの API の大幅な変更によるものです。セッションから「カウンター」を呼び出すことはできません。それは、 session.store.store_instance.get('counter') のようなものです。ここで、store_instance はシェルフまたはデータベースのいずれかです。私が言ったように、公式ドキュメントには重大な更新が必要です。

そうは言っても、これは docstring と同じではないことに気付きました。進歩するためにIpythonを起動すると、私が持っているすべての可能性が見えます。私はそれが純粋な推測であることを知っていますが、ネーミングは良いので、何をすべきかを理解することができます.

私の例を web.py のチームに提出して、彼らが公式ドキュメントを更新できるようにします。

于 2013-10-06T15:48:38.657 に答える
0

問題はpythonのバージョンです。私は同じ問題を抱えていて、2.7バージョンのpythonを実行したときに解決しました。> python2.7 code.py を実行するだけで、セッションは完全に機能します。web.py のドキュメントが非常に貧弱なのは残念です。

于 2015-08-19T10:16:48.660 に答える