<p>请参阅相关问题<a href="https://stackoverflow.com/questions/4936994/store-an-instance-of-a-connection-twisted-web">Store an instance of a connection - twisted.web</a>。这里的答案链接到这个博客文章<a href="http://jcalderone.livejournal.com/53680.html" rel="nofollow noreferrer">http://jcalderone.livejournal.com/53680.html</a>,其中显示了一个存储会话访问次数计数器的示例(感谢jcalderone的示例):</p>
<pre><code># 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()
</code></pre>
<p>如果这看起来令人困惑,请不要担心-在这里的行为变得合理之前,您需要了解两件事:</p>
<ol>
<li><a href="http://twistedmatrix.com/documents/current/core/howto/components.html" rel="nofollow noreferrer">Twisted (Zope) Interfaces & Adapters</a></li>
<li><a href="http://twistedmatrix.com/documents/current/api/twisted.python.components.Componentized.html" rel="nofollow noreferrer">Componentized</a></li>
</ol>
<p>计数器值存储在适配器类中,接口类记录该类提供的内容。之所以可以在适配器中存储持久数据,是因为Session(由getSession()返回)是Componentized的子类。在</p>