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日
- 初始版本