Pyramid1.4的新功能¶
本文解释了 Pyramid 与之前的版本相比,1.4版 Pyramid 1.3。它还记录了两个版本之间的向后不兼容以及添加到 Pyramid 1.4,以及软件依赖性更改和显著的文档添加。
主要功能添加¶
Pyramid1.4中的主要功能添加如下。
第三方谓词¶
现在可以添加第三方自定义视图、路由和订阅服务器谓词,供视图作者通过
pyramid.config.Configurator.add_view_predicate(),pyramid.config.Configurator.add_route_predicate()和pyramid.config.Configurator.add_subscriber_predicate(). 例如,这样做:config.add_view_predicate('abc', my.package.ABCPredicate)
可能允许视图作者在配置该谓词的应用程序中执行此操作:
@view_config(abc=1)
类似的特征存在于
pyramid.config.Configurator.add_route()和pyramid.config.Configurator.add_subscriber(). 见 添加自定义视图、路由或订阅服务器谓词 更多信息。
简单的自定义JSON序列化¶
视图现在可以返回自定义对象,通过定义一个
__json__对象类的方法。此方法应返回本机可序列化的值json.dumps(例如整数、列表、字典、字符串等)。见 序列化自定义对象 更多信息。现在,JSON呈现器还允许定义自定义类型适配器,以便将未知对象转换为JSON序列化,以防无法添加__json__方法返回对象。
部分Mako和变色龙模板渲染¶
Mako渲染器现在支持在资产规格中使用def名称。当def名称出现在资产规格中时,系统将在模板中呈现名为def的模板,而不是呈现整个模板。命名def的示例资产规格是
package:path/to/template#defname.mako. 这将呈现名为defname里面template.mako模板而不是呈现整个模板。在窗体中返回元组的旧方法('defname', {{}})支持从视图向后兼容。变色龙ZPT渲染器现在支持在资源规格中使用宏名称。当宏名称存在于资源规格中时,系统将渲染列为
define-macro并返回结果,而不是呈现整个模板。示例资产规格:package:path/to/template#macroname.pt. 这将使宏定义为macroname内template.pt模板而不是整个模板。
子请求支持¶
开发人员可以使用
pyramid.request.Request.invoke_subrequest()应用程序编程接口。这允许开发人员通过在不同的可调用视图中发出子请求,从一个可调用视图获取响应。见 调用子请求 更多信息。
次要功能添加¶
pyramid.authentication.AuthTktAuthenticationPolicy已更新以支持更新的哈希算法,如sha512. 如果可能的话,现有的应用程序应该考虑更新以提高默认MD5散列的安全性。pyramid.config.Configurator.add_directive()现在接受任意的可调用文件,如部分或对象实现__call__但没有__name__和__doc__属性。请参阅https://github.com/pylons/pyramid/issues/621和https://github.com/pylons/pyramid/pull/647。从本版本开始,
request_method视图/路由谓词在使用时也意味着HEAD使用时暗示GET. 例如,使用@view_config(request_method='GET')相当于使用@view_config(request_method=('GET', 'HEAD')). 使用@view_config(request_method=('GET', 'POST')相当于使用@view_config(request_method=('GET', 'HEAD', 'POST'). 这是因为head是get的一个变体,它省略了body,而webob在使用head时具有返回空body的特殊支持。pyramid.config.Configurator.add_request_method()已引入以支持使用任意可调用文件扩展请求对象。此方法扩展了现已弃用的文档pyramid.config.Configurator.set_request_property()通过支持方法和属性。这种方法还导致在请求的构造时间执行的代码比set_request_property().静态视图机械现在上升而不是返回
pyramid.httpexceptions.HTTPNotFound和pyramid.httpexceptions.HTTPMovedPermanently异常,这样就可以被未找到的视图(和其他异常视图)捕获。当出现谓词不匹配异常(当由于谓词不起作用而没有视图匹配给定请求时,会看到异常),异常现在包含对不匹配谓词的文本描述。
安
pyramid.config.Configurator.add_permission()向配置程序中添加了指令方法。该指令注册了一个独立的许可证,可以在Pyramid自省系统中自省。因此,在Pyramid顶部构建的框架可以使用permissions自省的类别数据,以构建运行系统支持的全面权限列表。在添加此方法之前,权限已经在此自省类别中注册,作为在pyramid.config.Configurator.add_view()调用,此方法只允许安排将权限放入permissions自省的类别,而不将其与关联视图一起命名。以下是使用add_permission::config = Configurator() config.add_permission('view')
这个
pyramid.session.UnencryptedCookieSessionFactoryConfig()函数现在接受signed_serialize和signed_deserialize可用于影响会话编组方式的Hook(默认情况下,这是通过hmac+pickle完成的)。pyramid.testing.DummyRequest现在支持由pyramid.util.InstancePropertyMixin类如set_property.通过添加请求属性和方法
pyramid.config.Configurator.add_request_method()或pyramid.config.Configurator.set_request_property()现在提供给粗花呢。通过添加请求属性和方法
pyramid.config.Configurator.add_request_method()或pyramid.config.Configurator.set_request_property()现在在从返回的请求对象中可用pyramid.paster.bootstrap().request.context环境要求期间pyramid.paster.bootstrap()如果在提供的请求上尚未设置上下文,则现在是根对象。pyramid.decorator.reify现在是API,已添加到API文档中。增加了
pyramid.testing.testConfig()上下文管理器,可用于在测试中生成配置程序,例如with testing.testConfig(...):.一个新的
pyramid.session.check_csrf_token()增加了方便API功能。A
check_csrf添加了视图谓词。例如,现在可以config.add_view(someview, check_csrf=True). 当谓词被选中时,如果csrf_token价值在request.params与请求会话中的CSRF令牌匹配,将允许执行该视图。否则,将不允许执行。添加
Base.metadata.bind = engine到alchemy脚手架,以便表的定义是强制性的将工作。关于脚手架文件章节的注释
.ini文件夹。允许将多个值指定给
request_param将谓词作为序列查看/路由。以前只允许使用单个字符串值。参见https://github.com/pylons/pyramid/pull/705在处添加了HTTP基本身份验证策略
pyramid.authentication.BasicAuthAuthenticationPolicy.这个
pyramid.config.Configurator.testing_securitypolicy()方法现在返回它创建的策略对象。由创建的DummySecurityPolicy
pyramid.config.Configurator.testing_securitypolicy()现在设置forgotten政策价值(价值True当其forget方法被调用。由创建的DummySecurityPolicy
pyramid.config.Configurator.testing_securitypolicy()现在设置remembered策略值,即principal当它的remember方法被调用。新的
physical_path视图谓词。如果指定,该值应该是一个字符串或元组,表示通过遍历找到的上下文的物理遍历路径,以便将该谓词匹配为true。例如:physical_path='/'或physical_path='/a/b/c'或physical_path=('', 'a', 'b', 'c'). 当某个对象被遍历到某个视图时,如果您希望始终潜在地显示该视图,这很有用,但是您不能确定它将是哪种类型的对象,因此不能使用context谓语。增加了一个
effective_principals路由和视图谓词。不允许从
pyramid.security.authenticated_userid()或者是由返回的主体列表之一的用户IDpyramid.security.effective_principals()作为字符串之一system.Everyone或system.Authenticated当任何内置授权策略pyramid.authentication正在使用中。这两个字符串是为Pyramid内部使用而保留的,它们将不再被接受为有效的用户ID。允许一个
_depth参数pyramid.view.view_config这将允许其他软件对decorator进行有限的组合重用,这些软件希望提供与view_config非常类似的自定义decorator。允许将一个不可访问的修饰符传递给
pyramid.config.Configurator.add_view(). 这允许视图由多个装饰器包装,而不需要自己组合装饰器。pyramid.security.view_execution_permitted()用于返回 True 如果找不到视图。现在提出了TypeError在这种情况下,异常是不合理的,因为断言不存在的视图是允许执行的。请参阅https://github.com/pylons/pyramid/issues/299。小孢子增强,它预期
pyramid.response.Response对象可能从视图返回。如果视图返回的对象的类是此类,则某些代码是快捷方式。类似的微优化被用于pyramid.request.Request.is_response().使所有变量都可以使用变量参数
p*命令 (pserve,pshell,pviews等)在表格中a=1 b=2所以您可以在参数化中填充值.ini文件,例如pshell etc/development.ini http_port=8080.为了允许人们忽略订阅者可调用文件的未使用参数,并规范事件订阅者和订阅者谓词之间的关系,我们现在允许订阅者和订阅者谓词只接受一个
event参数,即使它们已经订阅了涉及多个接口的通知。
向后不兼容¶
Pyramid路由器不再添加值
bfg.routes.route或bfg.routes.matchdict到请求的wsgi环境字典。这些值在repoze.bfg1.0(实际上是七个小版本)。如果代码依赖于这些值,请使用request.matched_route和request.matchdict相反。不能再将环境字典直接传递给
pyramid.traversal.ResourceTreeTraverser.__call__(阿卡ModelGraphTraverser.__call__)相反,您必须传递一个请求对象。自Pyramid1.1以来,传递环境而不是请求已生成拒绝警告。如果您使用
webob.request.LegacyRequest作为请求工厂。legacyRequest类的实例具有request.path_info它返回一个字符串。这个Pyramid释放假设request.path_info将无条件为Unicode。功能来自
pyramid.chameleon_zpt和pyramid.chameleon_text已命名get_renderer,get_template,render_template和render_template_to_response已被删除。自Pyramid1.0以来,这些机构在进口时发出了反预测警告。使用pyramid.renderers.get_renderer(),pyramid.renderers.get_renderer().implementation(),pyramid.renderers.render()或pyramid.renderers.render_to_response()而不是这些函数。这个
pyramid.configuration模块已删除。自Pyramid1.0以来,它已被弃用,并在使用时打印了弃用警告。使用pyramid.config相反。这个
pyramid.paster.PyramidTemplate已删除API。它自Pyramid1.1以来就被弃用,并发出了进口警告。如果您的代码依赖于此,请调整代码以导入pyramid.scaffolds.PyramidTemplate相反。这个
pyramid.settings.get_settings()已删除API。自从Pyramid1.0以来,它一直在打印一个反预测警告。如果您的代码依赖于此API,请使用pyramid.threadlocal.get_current_registry().settings或者使用settings请求中可用的注册表属性 (request.registry.settings)这些API来自
pyramid.testing模块被移除。自Pyramid1.0以来,他们一直在打印弃用警告:registerDummySecurityPolicy使用pyramid.config.Configurator.testing_securitypolicy()相反。registerResources(阿卡registerModels)、使用pyramid.config.Configurator.testing_resources()相反。registerEventListener使用pyramid.config.Configurator.testing_add_subscriber()相反。registerTemplateRenderer(阿卡registerDummyRenderer)、使用pyramid.config.Configurator.testing_add_renderer()相反。registerView使用pyramid.config.Configurator.add_view()相反。registerUtility使用pyramid.config.Configurator.registry.registerUtility()相反。registerAdapter使用pyramid.config.Configurator.registry.registerAdapter()相反。registerSubscriber使用pyramid.config.Configurator.add_subscriber()相反。registerRoute使用pyramid.config.Configurator.add_route()相反。registerSettings使用pyramid.config.Configurator.add_settings()相反。
在Pyramid1.3及以上版本中,
__call__在执行任何完成的回调之前,调用了视图返回的响应对象的方法。从本版本开始,__call__调用响应对象的方法 之后 执行完成的回调。这是为了支持pyramid.request.Request.invoke_subrequest()特征。
废弃¶
这个
pyramid.config.Configurator.set_request_property()指令已被文档弃用。该方法仍然可用,但更具特点pyramid.config.Configurator.add_request_method()应在其位置使用(它具有所有相同的功能,但也可以使用方法扩展请求对象)。pyramid.authentication.AuthTktAuthenticationPolicy如果应用程序正在使用策略而没有显式传递hashalg参数。这是因为默认值是“md5”,理论上认为它会受到碰撞攻击。如果您真的想要“md5”,那么必须显式地指定它以消除警告。
文档增强功能¶
增加了一个 升级金字塔 叙述性文件的章节。它描述了如何处理PyramidAPI的拒绝和删除,以及如何在运行测试和运行服务器时显示Pyramid生成的拒绝警告。
增加了一个 调用子请求 叙述性文件的章节。
所有使用的教程
pyramid.authentication.AuthTktAuthenticationPolicy现在显式通过sha512作为一个hashalg参数。对叙述和API文档进行了许多清理和改进。
依赖关系更改¶
Pyramid现在需要Webob 1.2b3+(之前的Pyramid版本仅依赖于1.2dev+)。这是为了确保我们获得返回
request.path_info作为文本。