跳转到主要内容

Zope 2发布后钩子

项目描述

注意

此软件包提供向后兼容性。新代码应直接使用Zope 2.12中引入的发布事件。

对于Zope 2.10,发布事件的回滚版本可在ZPublisherEventsBackport中找到。此软件包需要此版本,并且可以直接添加到您的buildout中,或通过指定“Zope2.10”额外选项。

eggs =
    Plone
    plone.postpublicationhook [Zope2.10]

简介

此软件包提供对Zope的ZPublisher的钩子,在发布者完成发布后但事务提交和响应返回给请求的浏览器之前运行。这对于缓存目的很有用:这是确定和插入缓存头到响应的理想位置。

钩子使用zope.event的事件机制,通过plone.validatehook.interfaces.IPostValidationEvent。这基于来自zope.component的标准ObjectEvent。

示例

例如,我们将编写一小段代码来记录每个已发布对象的路径。这是事件处理器的代码

from zope.interface import Interface
from zope.component import adapter
from plone.postpublicationhook.interfaces import IAfterPublicationEvent
import logging

logger = logging.getLogger("LogRequest")

@adapter(Interface, IAfterPublicationEvent)
def LogRequest(object, event):
    if getattr(object, "getPhysicalPath", None) is None:
        path="Unknown path"
    else:
        path="/".join(object.getPhysicalPath()

    logger.info("Request for object %s" % path)

要使用此代码,您需要将其注册在zcml中

<subscriber handler=".events.LogRequest" />

直接使用ZPublisher事件

IPubBeforeCommit事件等同于IAfterPublicationEvent,但它不是一个ObjectEvent,因此有一些变化

from zope.component import adapter
from ZPublisher.interfaces import IPubBeforeCommit
import logging

logger = logging.getLogger("LogRequest")

@adapter(IPubBeforeCommit)
def LogRequest(event):
    request = event.request
    object = request['PUBLISHED']
    if getattr(object, "getPhysicalPath", None) is None:
        path="Unknown path"
    else:
        path="/".join(object.getPhysicalPath()

    logger.info("Request for object %s" % path)

以相同的方式在zcml中注册它

<subscriber handler=".events.LogRequest" />

变更日志

1.1 - 2010-06-08

  • 一般和元数据清理。[hannosch]

  • 重构以使用ZPublisher发布事件(在Zope 2.10及ZPublisherEventsBackport中可用)。[lrowe]

1.0rc1 - 2008-10-15

  • 首次发布 [wichert]

项目详情


下载文件

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

源代码发行版

plone.postpublicationhook-1.1.zip (10.5 kB 查看哈希值)

上传时间 源代码

由以下支持