使用烧杯实现zope会话。
dolmen.beaker的Python项目详细描述
会话
配置
>>> from zope.component import getUtility, queryUtility >>> from dolmen.beaker.interfaces import ISessionConfig>>> session_config = queryUtility(ISessionConfig) >>> session_config.get('key') 'beaker.session.id'
初始化
dolmen.beaker遍历时初始化烧杯会话 开始(遍历irootfolder对象):
>>> from zope.event import notify >>> import grokcore.component as grok >>> from zope.publisher.browser import TestRequest >>> from zope.publisher.interfaces.http import IHTTPRequest >>> from zope.traversing.interfaces import BeforeTraverseEvent
首先,我们创建请求的实例:
>>> request = TestRequest() >>> IHTTPRequest.providedBy(request) True
我们在beforetraverseevent的帮助下初始化会话。 此事件将在请求中生成会话对象的实例:
>>> from zope.component.hooks import getSite >>> site = getSite() >>> notify(BeforeTraverseEvent(site, request))
我们可以使用两个可用的适配器获取会话对象:
>>> from dolmen.beaker.interfaces import ISession >>> session = ISession(request) >>> session.__class__ <class 'beaker.session.SessionObject'>
我们为会话分配一个值并保存它:
>>> session['foo'] = 'bar' >>> session.save() >>> session['foo'] 'bar'
如果不遍历,新请求将无法访问会话:
>>> newrequest = TestRequest() >>> newrequest.response._cookies {} >>> session = ISession(newrequest) >>> session['foo'] Traceback (most recent call last): ... KeyError: 'foo'
关闭和失效
>>> cookie = request.response._cookies >>> cookie {}>>> from zope.publisher.interfaces import EndRequestEvent >>> notify(EndRequestEvent(site, request))>>> cookie = request.response._cookies >>> cookie {'beaker.session.id': {'path': '/', 'value': '...'}}
失效
>>> session = ISession(request) >>> print session['foo'] bar >>> session.invalidate() # Or destroy, to get rid of everything >>> session['foo'] Traceback (most recent call last): ... KeyError: 'foo'>>> print session {'_id': '...'}
zope会话适配器
>>> from zope.session.interfaces import ISession as IZopeSession>>> request = TestRequest() >>> notify(BeforeTraverseEvent(site, request))>>> zsession = IZopeSession(request) >>> print zsession <dolmen.beaker.session.ZopeSession object at ...>>>> from zope.interface.verify import verifyObject >>> verifyObject(IZopeSession, zsession) True>>> data = zsession['my_package'] >>> print data <dolmen.beaker.session.NamespaceSessionData object at ...>>>> data['someitem'] = 'test' >>> print data['someitem'] test>>> print zsession.keys() ['my_package.someitem', '_id']>>> data = zsession['some.other.package'] >>> data['info'] = 'Grok !'>>> print zsession.keys() ['my_package.someitem', '_id', 'some.other.package.info']
更改日志
0.1(2010-07-01)
- 初始版本