跳转到主要内容

使用beaker实现的zope会话。

项目描述

会话

配置

>>> 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对象)初始化beaker会话。

>>> 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实例。

>>> request = TestRequest()
>>> IHTTPRequest.providedBy(request)
True

我们通过BeforeTraverseEvent来初始化我们的会话。此事件将在请求中创建一个Session对象实例。

>>> 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': '/', 'samesite': 'Lax', 'value': '...'}}

无效化

>>> import hamcrest
>>> 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'

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
>>> data = zsession['some.other.package']
>>> data['info'] = 'Grok !'

更新日志

0.4 (2020-10-07)

  • 更新MANIFEST

0.3 (2020-04-07)

  • 修正了已弃用的导入和包结构。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源分布

dolmen.beaker-0.4.tar.gz (8.1 kB 查看哈希值)

上传时间

由以下机构支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面