Zope和Plone的烧杯集成

collective.beaker的Python项目详细描述


collective.烧杯-Zope 2和Plone的烧杯集成。

此包提供了一种配置烧杯会话管理和缓存框架的方法 在Zope 2(和Plone)环境中使用。

通常,烧杯是使用wsgi中间件配置的。然而,Zope 2确实 默认情况下(尚未)不运行wsgi(除非使用 repoze.zope2 )。这个包裹 提供另一种基于zope.conf的配置语法。

安装

要使用此软件包,您需要安装它。通常,你会这样做 通过您自己软件包的setup.py中的install-requires行

install_requires=[
      ...
      'collective.beaker',
  ],

您也可以使用buildout.cfg中的 eggs 行安装它,例如:

[instance]
...
eggs =
    ...
    collective.beaker

如果您使用的是zope 2.10(例如,对于plone 3),还需要安装 zpublisherEventsBackport 包。你可以 通过依赖于额外的 [zope2.10] 获取这个依赖项,例如:

[instance]
...
eggs =
    ...
    collective.beaker [Zope2.10]

如果您在Zope2.12或更高版本中,则默认情况下包含相关事件, 你不应该依赖于ZpublisherEventsBackport或 [zope2.10] 额外。

配置烧杯

要配置烧杯,请在 zope.conf中添加如下部分:

<product-config beaker>
    cache.type              file
    cache.data_dir          /tmp/cache/data
    cache.lock_dir          /tmp/cache/lock
    cache.regions           short, long
    cache.short.expire      60
    cache.long.expire       3600

    session.type            file
    session.data_dir        /tmp/sessions/data
    session.lock_dir        /tmp/sessions/lock
    session.key             beaker.session
    session.secret          secret
</product-config>

如果您使用buildout和 plone.recipe.zope2instance来生成 zope.conf ,您可以使用以下选项:

[instance]
...
zope-conf-additional =
    <product-config beaker>
        cache.type              file
        cache.data_dir          ${buildout:directory}/var/cache/data
        cache.lock_dir          ${buildout:directory}/var/cache/lock
        cache.regions           short, long
        cache.short.expire      60
        cache.long.expire       3600

        session.type            file
        session.data_dir        ${buildout:directory}/var/sessions/data
        session.lock_dir        ${buildout:directory}/var/sessions/lock
        session.key             beaker.session
        session.secret          secret
    </product-config>

在这里,我们还使用了buildout替换来放置缓存和会话 构建目录中的目录。

您还需要加载 collective.beaker 包的配置。 这可以用这样的zcml行来完成:

<include package="collective.beaker" />

这可以在您自己的configure.zcml中,也可以在zcml slug中。如果你是 使用buildout和 plone.recipe.zope2instance,您可以安装一个slug 通过添加一个 zcml 行,例如:

[instance]
...
zcml =
    collective.beaker

通过 <;产品配置 烧杯>; 部分中的设置 直接到烧杯。有关烧杯配置的更多详细信息,请参见 烧杯配置文档 可用选项。

请注意:

  • 所有缓存设置都必须以 缓存作为前缀。
  • 所有会话设置都必须以 会话作为前缀。

对于会话设置,以下默认设置适用:

  • invalidate_corrupt=true ,因此损坏的会话将失效
  • 类型=无 数据目录=无 ,因此默认为内存中 会话
  • key=beaker.session.id -这是cookie键
  • 超时=无 ,因此会话不会超时
  • secret=none ,因此会话cookie不加密
  • 日志文件=无 ,因此没有日志记录

使用会话

要从请求获取烧杯会话,请使用以下模式:

>>> from collective.beaker.interfaces import ISession
>>> session = ISession(request)

有关结果的详细信息,请参见烧杯会话文档 会话对象。你或多或少可以把它当作一本带字符串的字典 按键:

>>> session['username'] = currentUserName

如果修改会话,则需要手动保存它:

install_requires=[
      ...
      'collective.beaker',
  ],
0

或者,您可以将 session.auto 配置键设置为 on , 每次请求都会自动保存会话。

如果要删除会话,请使用:

install_requires=[
      ...
      'collective.beaker',
  ],
1

注意烧杯不会自动终止/移除会话,因此您可以 必须自己动手。

如果要使会话无效并创建新会话,请使用:

install_requires=[
      ...
      'collective.beaker',
  ],
2

注意,SES当每个请求开始时,基于 从zope.conf中读取的会话设置。可以覆盖这些 通过注册一个实用程序,从这个包中提供 isessionconfig 。这个 实用程序必须实现dict api(您可以使用常规dict或 例如,持久映射对象)。例如,这允许站点- 提供每个站点会话数据的本地实用程序。

使用缓存

烧杯文档说明了如何将缓存管理器创建为 全局变量。cachemanager实例提供decorators和 使用缓存的函数。你仍然可以使用这个模式,但这将 不使用zope.conf中由collective.beaker管理的任何配置

但是,您可以使用缓存区域以及显式缓存api。AT 运行时(但在模块范围内 不是 )您可以获得烧杯 缓存管理器 按照zope.conf进行配置,如下所示:

install_requires=[
      ...
      'collective.beaker',
  ],
3

现在,您可以按照烧杯文档以编程方式使用它,例如:

install_requires=[
      ...
      'collective.beaker',
  ],
4

有关详细信息,请参阅烧杯缓存文档。

您还可以使用缓存区域装饰符,例如使用:

install_requires=[
      ...
      'collective.beaker',
  ],
5

如果配置了"short"区域(如 zope.conf中所示) 上面的例子),这将懒散地查找区域设置并使用那些 用于缓存。

要使缓存失效,可以调用:

install_requires=[
      ...
      'collective.beaker',
  ],
6

有关详细信息,请再次参阅烧杯文档。

测试

如果您正在为使用烧杯会话或 缓存,在调用 相关代码。否则,可能会出现组件查找错误 在 isessionconfig icachemanager 层上。这是因为整合 使用 zopetestcase / plonetestcase 编写的测试不读取 zope.conf 因此 collective.beaker 配置代码没有 加载时有任何配置数据。

您可以通过以下两种方式之一来处理此问题:

  • 注册您自己的 isessionconfig 和/或 icachemanager 实用程序。 有关详细信息,请参见 interfaces.py
  • 在zcml处理之前提供"假"zconfig设置。

您可以在 collective.beaker.testing.beakerconfiglayer中使用测试层。 做后者。你要确保这层之前已经混合好了 执行zcml处理的任何层。例如:

install_requires=[
      ...
      'collective.beaker',
  ],
7

当然,您可以在 层。重要的是,beakerconfiglayer plonesitelayer,它将配置站点。

此设置将使用默认设置(请参见 testing.py 了解 值),但您可以在每个设置的基础上操作这些值。例如:

install_requires=[
      ...
      'collective.beaker',
  ],
8

请记住,这通常是一个全局实用程序,因此任何更改都将 跨测试边界,除非您也正确地删除了设置。因此, 在层中进行此设置可能比在 单独测试。

在编写使用烧杯会话的测试时,如果不执行 使用类似于zope.testbrowser的函数测试 需要模拟请求开始/结束事件 侦听以配置会话。

例如:

install_requires=[
      ...
      'collective.beaker',
  ],
9

在单元测试中,仅仅提供一个mock isession可能更容易。 请求的适配器。这里有一个模拟会话实现 可帮助您完成此操作的软件包:

[instance]
...
eggs =
    ...
    collective.beaker
0

与"真实"会话一样,测试会话与请求绑定,因此 每次在 请求。你可以还要检查以下属性以查看会话 已使用:

  • 如果调用了一次save() ,则 \u saved 为真。
  • \u invalidated 如果调用一次 invalidate() 则为true。
  • 如果调用了一次delete() ,则 \u deleted 为真。

最后, accessed() 将返回true,并且 最后一次访问的属性 当常用字典操作为 使用。

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

推荐PyPI第三方库


热门话题
java如何定制springdata存储库方法名称?   html有没有办法将java应用程序或JApplet嵌入到网站中?   Jackson ObjectMapper将java从字符串序列化为JSON作为namevalue   java刷新JTable?   用Java程序分发用JavaDB制作的数据库   java Android如何启动新活动   当集合大小超过500.000时,java的处理速度会显著降低   在java的分层目录中的多个目录中查找相同的文件   java如何将ArrayList数据插入数据库   java如何修改此代码,使其时间复杂度为o(logn)或o(n),而不是o(n^2)   java面板(SimplePanel)中仅显示图像的前1/3(大约),   jakarta ee Java Bean和企业Java Bean之间的区别?   创建AWS Cloudfront自签名URL(java sdk)时出现amazon web服务错误   基于Jersey和Jackson查询参数的java动态属性过滤