存储连接实例 - twisted.web
我想知道在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()