为Zope2提供的子请求
项目描述
概述
plone.subrequest为Zope提供了发起子请求的机制。
安装
Plone 4+
此包包含在核心Plone中,因此不需要特殊安装。
Zope
以常规方式加载此包的ZCML。
用法
基本用法
调用subrequest(url),它返回一个响应对象。
>>> from plone.subrequest import subrequest >>> response = subrequest('/folder1/@@url') >>> response.getBody() b'http://nohost/folder1'
response.getBody()也适用于调用response.write(data)的代码。这返回一个文本/非字节值。
>>> response = subrequest('/@@response-write') >>> response.getBody() 'Some data.\nSome more data.\n'
但在此情况下,response.getBody()可能只能调用一次。
>>> response.getBody() Traceback (most recent call last): ... ValueError: I/O operation on closed file
将响应体作为文件访问
某些代码可能调用response.write(data)。
>>> response = subrequest('/@@response-write')
在这种情况下,你可以将response.stdout作为文件访问。
>>> response.stdout.seek(0, 0) or 0 # Py2 returns None, Py3 returns new position 0 >>> list(response.stdout) ['Some data.\n', 'Some more data.\n']
你可以使用response._wrote测试是否返回了文件。
>>> response._wrote 1
完成时,关闭文件
>>> response.stdout.close()
使用response.outputBody()确保可以以文件的方式访问体。
>>> from plone.subrequest import subrequest >>> response = subrequest('/folder1/@@url') >>> response._wrote >>> response.outputBody() >>> response._wrote 1 >>> response.stdout.seek(0, 0) or 0 # Py2 returns None, Py3 returns new position 0 >>> list(response.stdout) ['http://nohost/folder1']
相对路径
相对路径相对于父请求的位置解析
>>> from plone.subrequest.tests import traverse >>> request = traverse('/folder1/@@test') >>> response = subrequest('folder1A/@@url') >>> response.getBody() b'http://nohost/folder1/folder1A'
这考虑了默认视图的URL。
>>> request = traverse('/folder1') >>> request['URL'] == 'http://nohost/folder1/@@test' True >>> response = subrequest('folder1A/@@url') >>> response.getBody() b'http://nohost/folder1/folder1A'
虚拟主机
当使用虚拟主机时,绝对路径从虚拟主机根目录遍历。
>>> request = traverse('/VirtualHostBase/http/nohost:80/folder1/VirtualHostRoot/') >>> response = subrequest('/folder1A/@@url') >>> response.getBody() b'http://nohost/folder1A'
指定根目录
你也可以显式设置根对象
>>> app = layer['app'] >>> response = subrequest('/folder1A/@@url', root=app.folder1) >>> response.getBody() b'http://nohost/folder1/folder1A'
错误响应
可能找不到子请求。
>>> response = subrequest('/not-found') >>> response.status 404
或者可能引发错误。
>>> response = subrequest('/@@error') >>> response.status 500
或者可能引发由自定义错误视图渲染的错误。
>>> response = subrequest('/@@custom-error') >>> response.status 500 >>> response.body b'Custom exception occurred: A custom error'
因此,检查期望的状态。
>>> response = subrequest('/') >>> response.status == 200 True
处理子请求
父请求被设置为PARENT_REQUEST到子请求。
子请求还提供了plone.subrequest.interfaces.ISubRequest标记接口。
变更日志
2.0.5 (2024-01-22)
内部
更新配置文件。[plone开发者] (cfffba8c)
2.0.4 (2023-06-09)
内部
更新配置文件。[plone开发者] (b5084eff)
2.0.3 (2023-03-14)
内部
更新配置文件。[plone开发者] (13d8d6c0)
2.0.2 (2023-02-07)
错误修复
将依赖项声明为z3c.dependencychecker找到的。[gforcada] (#1)
2.0.1 (2023-01-27)
内部
通过github.com/plone/meta统一存储库配置。[gforcada, maurits] (#1)
2.0.0 (2022-11-30)
错误修复
最终发布。[gforcada] (#600)
2.0.0b1 (2022-09-07)
破坏性更改
停止Python 2支持并更新代码风格。[jensens] (#25)
1.9.3 (2020-09-26)
错误修复
修复了对zope.site.hooks的弃用警告。[maurits] (#24)
1.9.2 (2020-04-22)
错误修复
微小的包装更新。(#1)
1.9.1 (2019-04-29)
错误修复
修复回归错误,在Python 2.7中,当tiles包含非ascii字符时会导致破坏。[MrTango] (#22)
1.9.0 (2018-12-11)
破坏性更改
删除five.globalrequest依赖项。它已在Zope 4中弃用。[gforcada]
1.8.6 (2018-09-23)
新功能
修复没有ZServer的importsi。[pbauer]
错误修复
更多Python 3兼容性。[ale-rt, thet]
使测试依赖项Archetypes可选。[davisagli]
1.8.5 (2018-01-30)
错误修复
添加Python 2 / 3兼容性。[pbauer]
1.8.4 (2017-09-06)
新功能
添加对Zope异常视图的支持,当未定义显式异常处理程序时。[datakurre]
错误修复
修复了示例unauthorized_exception_handler未能正确设置响应状态代码的问题。[datakurre]
1.8.3 (2017-08-30)
错误修复
撤销“从路径中删除vurl-parts”,这导致了p.a.mosaic页面的破坏。[thet]
1.8.2 (2017-07-20)
错误修复
从路径中删除vurl-parts。[awello]
1.8.1 (2017-06-28)
错误修复
删除unittest2依赖项。[kakshay21]
1.8 (2016-11-01)
新功能
提供将Unauthorized重写为401的异常处理器。[jensens]
1.7.0 (2016-05-04)
新功能
允许为响应传递自定义异常处理器。[jensens]
修复
当子请求修改了数据库(或子请求之前的主要请求)时,分配给请求的oids在每个后续子请求中都会加倍。这在使用大量子请求时导致内存不足错误,例如在基于Mosaic的站点上使用一定数量的tiles时。通过只添加父请求已知的oids来解决,而不是添加新的oids。[jensens]
整理:isort导入,autopep8,小手动清理(无zope.app.导入)。[jensens]
1.6.11 (2015-09-07)
在子请求上传播IDisableCSRFProtection接口到父请求对象。[vangheem]
1.6.10 (2015-08-14)
从plone.protect传播已注册的安全写入到父请求对象。[vangheem]
1.6.9 (2015-03-21)
针对上游包缺少依赖声明导致测试失败的处理方案,详情请见 https://github.com/plone/plone.app.blob/issues/19。 [jensens]
整理和维护代码(pep8等)。 [jensens]
修复主请求的response中新的cookies未传递给子请求的问题。 [datakurre]
标准化request的path_info,以确保字符串索引可以正常工作。 [gweiss]
1.6.8 (2014-03-04)
处理路径中包含双//的子请求。 [gweis]
1.6.7 (2012-10-22)
确保正确处理裸虚拟托管URL。 [elro]
1.6.6 (2012-06-29)
记录处理子请求时发生的错误,以帮助调试plone.app.theming错误,包括来自不同URL的内容 [anthonygerrard]
1.6.5 (2012-04-15)
确保父URL是一个字符串而不是Unicode。 [davisagli]
1.6.4 - 2012-03-22
修复由于复制过多其他变量而导致某些Unicode字符双重编码的问题。 [elro]
1.6.3 - 2012-02-12
将其他请求变量(如LANGUAGE)复制到子请求。 [elro]
1.6.2 - 2011-07-04
处理默认文档中的空格。 http://dev.plone.org/plone/ticket/12278
1.6.1 - 2011-07-04
将测试移动到包目录,以便在正常安装时进行测试。
1.6 - 2011-06-06
确保URL是一个字符串而不是Unicode。 [elro]
1.6b2 - 2011-05-20
设置PARENT_REQUEST并在子请求中添加ISubRequest接口。 [elro]
1.6b1 - 2011-02-11
处理IStreamIterator。 [elro]
简化API,使response.getBody()始终有效。 [elro]
1.5 - 2010-11-26
将子请求响应中的cookies合并到父响应中。 [awello]
1.4 - 2010-11-10
首先处理processInput,然后遍历(修复#11254) [awello]
1.3 - 2010-08-24
修复虚拟主机和引号路径的bug。 [elro]
1.2 - 2010-08-16
在子请求后恢复zope.component站点。 [elro]
1.1 - 2010-08-14
虚拟主机、相对URL和错误响应支持。 [elro]
1.0 - 2010-07-28
初始发布。 [elro]
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。