См. Этот связанный вопрос Сохранение экземпляра соединения - 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()
Не волнуйтесь, если это кажется запутанным - есть две вещи, которые вы должны понять, прежде чем поведение будет иметь смысл:
- Витые (Zope) интерфейсы и адаптеры
- компонентный
Значение счетчика хранится в классе Adapter, класс Interface документирует, что обеспечивает этот класс. Причина того, что вы можете хранить постоянные данные в адаптере, заключается в том, что Session (возвращаемый getSession ()) является подклассом Componentized.