使用烧杯实现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)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中最小长度的字数计算   java事务处理JavaEE 6   java如何进行5分钟刷新并检查txt是否被修改?   java可以同时拖动多个对象   变量长、双精度、字节、字符在Java中的用途是什么?   spring将XMLBean配置转换为java配置   java检测不可靠网络上的TCP丢失   Java:TCP加密、SSL和Netty   在java中,如何使用isAssignableFrom的映射避免多个if-else   在J2EE动态Web项目中找不到java CSS文件   java遍历领域查询到RealmList   安卓阅读网站内容Java   java如何修改/自定义/反编译Opera mini jar文件?   java死锁播放框架如何使用控制器中的参数检查@RestrictedResource?   java在MS Excel中导入xml文件我们如何使用Python或任何其他编程语言自动化此流程?   java如何暂停正在运行的线程并在需要时重新启动同一线程?