この関連する質問を参照してくださいStore an instance of a connection - twisted.web。そこの答えは、このブログ投稿http://jcalderone.livejournal.com/53680.htmlへのリンクです。これは、セッションの訪問数のカウンターを保存する例を示しています (例については jcalderone に感謝します)。
# in a .rpy file launched with `twistd -n web --path .`
cache()
from zope.interface import Interface, Attribute, implements
from twisted.python.components import registerAdapter
from twisted.web.server import Session
from twisted.web.resource import Resource
class ICounter(Interface):
value = Attribute("An int value which counts up once per page view.")
class Counter(object):
implements(ICounter)
def __init__(self, session):
self.value = 0
registerAdapter(Counter, Session, ICounter)
class CounterResource(Resource):
def render_GET(self, request):
session = request.getSession()
counter = ICounter(session)
counter.value += 1
return "Visit #%d for you!" % (counter.value,)
resource = CounterResource()
これが混乱しているように見えても心配しないでください。ここでの動作を理解するには、次の 2 つのことを理解する必要があります。
- Twisted (Zope) インターフェイスとアダプター
- コンポーネント化
カウンター値は Adapter クラスに格納され、Interface クラスはそのクラスが提供するものを文書化します。Adapter に永続データを格納できるのは、Session (getSession() によって返される) が Componentized のサブクラスであるためです。