hook into repoze.zope2,它允许第三方包注册一系列hook,这些hook允许在将响应返回到浏览器之前修改响应。

plone.transformchain的Python项目详细描述


简介

plone.transformchain提供了一些方法,用于在返回到浏览器之前修改使用repoze.zope2或“经典”ZPublisher发布的页的响应。

从提供ITransform接口的(published, request)注册一个唯一命名的适配器。 published是已发布的对象,例如视图;request是当前请求。

可以使用适配器的order属性维护转换的顺序。

将调用三个方法之一,具体取决于从发布服务器和/或上一个方法获取的输入类型。

  • ^如果输入是str(bytes)对象,则调用{tt9}$。
  • transformUnicode()如果输入是Unicode对象,则调用
  • transformIterable()如果输入是另一种类型的iterable,则调用

每个阶段都可以返回字节字符串、unicode字符串或iterable。

大多数变形金刚都会有一个“自然”的结果表示, 并将实现相应的方法以返回相同表示的另一个值, 例如,实现transformUnicode()以转换并返回Unicode对象。 然后,其他方法可以实现为不返回(不执行任何操作)或将值转换为适当的类型。

链中的第一个变压器可能会得到:

  • 如果变压器在标准zope 2 zpublisher下运行,则为字节字符串。
  • 如果变压器在repoze.zope2或其他wsgi管道下运行,则为Iterable。

检查self.request.response.getHeader('content-type')以查看结果的类型。 iterable在解绕时将符合此类型,例如对于“text/html”,''.join(result)应为html字符串。

返回值将传递给链中的下一个转换。 最后的转换应该返回unicode字符串、编码字符串或iterable。

如果链中最后一个转换返回字节字符串或Unicode字符串,则^{TT14}$头将自动更新。

返回None以表示不应更改上一个转换的结果。

下面是一个将所有内容大写的示例:

from zope.component import adapter
from zope.interface import implementer
from zope.interface import Interface
from plone.transformchain.interfaces import ITransform

@implementer(ITransform)
@adapter(Interface, Interface) # any context, any request
class UpperTransform(object):

    order = 1000

    def __init__(self, published, request):
        self.published = published
        self.request = request

    def transformBytes(self, result, encoding):
        return result.upper()

    def transformUnicode(self, result, encoding):
        return result.upper()

    def transformIterable(self, result, encoding):
        return [s.upper() for s in result]

您可以在zcml中注册,如下所示:

<adapter factory=".transforms.UpperTransform" name="example.uppertransform" />

如果需要关闭特定请求的转换, 您可以在request.environ

中设置密钥
request.environ['plone.transformchain.disable'] = True

这将使响应保持不变,并且根本不会调用任何ITransform适配器。

更改日志

2.0.1(2018-11-04)

错误修复:

  • 更多的py3测试和功能修复。 [pbauer,thet]

2.0.0(2018-06-20)

中断更改:

  • 放弃对Python2.6的支持。 [詹森]

新功能:

  • 将zserver设为可选

错误修复:

  • python 2/3兼容性的更多修复。 [pbauer,thet]

1.2.2(2018-02-11)

错误修复:

  • 添加python 2/3兼容性 [文塞罗]

1.2.1(2017-06-28)

错误修复:

  • 删除UnitTest2依赖项 [Kakshay21]

1.2.0(2016-06-21)

新的:

  • 在执行所有/单个转换之前/之后添加要通知的事件。 [詹森]

1.1.0(2016-02-21)

新的:

  • 需要zope2>;=2.13.23 [詹森]

修复:

  • Pep8等人使用ZCA装饰器… [詹森]

1.0.4(2015-05-11)

  • 小清理:空白,git忽略,rst。 [gforcada,rnix,毛里塔尼亚]

1.0.3(2013-01-13)

  • 字符集正则表达式有问题,它应该有一个 在mimetype和charset之间只有一个空格。所以一个有效的值 “text/html;charset=utf-8”不匹配,返回默认的编码。 我们通过允许任意数量的空间(包括反渗透)。 [jpgimenez]

1.0.2(2012-01-26)

  • 修复打包错误。 [埃斯特勒]

1.0.1(2012-01-26)

  • 计算错误状态并按要求存储。 使用Zope2.13发布事件解决Bug: 通知ipubbeforeabort时未设置response.status。 [明白]
  • 不转换ftp请求 [罗奇康潘]

1.0-2011年5月13日

  • 最终版本1.0。 [埃斯特勒]

1.0b1-2010年4月21日

  • 初始版本

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

推荐PyPI第三方库


热门话题
ApachePOI如何通过java从excel文件中删除空白列?   linux到后台Java服务应用程序的简单发送/接收接口   java ActionBarPullToRefresh什么都没发生   java从millis获取错误的整数天   java相同的代码在两个不同的包上表现不同   java将每个新的char元素写入一个文件(如果被覆盖)   mysql如何在Java中通过外键链接的多个表中插入数据   java环境下mysql网络文件访问   java当使用构建器模式时,为什么我不应该重用builderobject来访问对象配置?   java jQueryServlet post异常失败   java应该使用什么逻辑来创建像《愤怒的小鸟》中那样的锁屏   java Android:在不滑动的情况下更改ViewPager中的片段   java在使用我的程序逻辑时获得空输出