放大镜
plone.postpublicationhook的Python项目详细描述
注意
提供此包是为了向后兼容新代码应该使用 Zope2.12中直接引入的发布事件。
对于Zope2.10,发布事件的后台端口在 ZPublisherEventsBackport。这是此包所必需的,可以添加 直接生成,或通过指定“Zope2.10”附加值:
eggs = Plone plone.postpublicationhook [Zope2.10]
导言
这个包提供了一个到zope的zpublisher的钩子,它在 publisher已完成发布,但在提交事务之前 并将响应返回到请求的浏览器这对 缓存目的:它是确定和插入缓存头的理想位置 在回应中
钩子使用zope.event的事件机制,使用 plone.validatehook.interfaces.ipostValidationEvent。这是基于 来自zope.component的标准对象事件。
示例
作为一个例子,我们将编写一些代码来记录每个发布的 反对。这是事件处理程序的代码:
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
- 常规和元数据清理。 [汉诺什]
- 重构以使用ZPublisher发布事件(在Zope 2.10中提供 ZpublisherEventsBackport.) [欠]
1.0rc1-2008年10月15日
- 初次发行 [威瑟特]