存储连接实例 - twisted.web

1 投票
1 回答
1424 浏览
提问于 2025-04-16 11:28

我想知道在twisted.web中怎么存储一个连接的实例。我看到有request.getSession()这个方法,但我搜索了一下,发现很少有关于怎么存储和后续取出的例子。

谢谢。

更新:我想把ldap连接存储在一个会话中,以便以后可以取出来。

  def render_POST(self, request):

    command = request.path[1:]
    session = request.getSession()

    if command == "authentication":
      Connect = LdapConnection(request.args['host'][0],request.args['user'][0],request.args['password'][0])
      session.addComponent(LdapConnection, Connect)                  

    if command == "users":
      Connect = session.getComponent(LdapConnection)                     
      u = Users(Connect, request.args['name'][0],request.args['employeeNumber'])

    return

1 个回答

4

twisted 的文档 中有很多例子。如果你想要快速了解一下 如何使用会话,可以看看这个总结。

from twisted.web.resource import Resource

class ShowSession(Resource):
    def render_GET(self, request):
        return 'Your session id is: ' + request.getSession().uid

class ExpireSession(Resource):
    def render_GET(self, request):
        request.getSession().expire()
        return 'Your session has been expired.'

resource = ShowSession()
resource.putChild("expire", ExpireSession())

别忘了,使用 request.getsession() 的时候,如果会话还不存在,它会自动创建一个新的会话。这个教程还解释了 如何在会话中存储对象

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

撰写回答