Pyramid1.9的新功能

本文解释了 Pyramid 与之前的版本相比,1.9版 Pyramid 1.8。它还记录了两个版本之间的向后不兼容以及添加到 Pyramid 1.9,以及软件依赖性更改和显著的文档添加。

主要功能添加

  • 所有人使用的文件格式 p* 命令行脚本,例如 pservepshell 以及 pyramid.paster.bootstrap() 由于对 plaster .

    到目前为止,Pyramid仍在运输中,并集成了对pastedeploy ini格式的支持,具体取决于 plaster_pastedeploy 绑定库。这在将来可能会改变,因此建议开始应用时,取决于其需要的合适的石膏粘合剂。

    参见https://github.com/pylons/pyramid/pull/2985

  • 增加了一个 execution policy 挂接到请求管道。执行策略能够在请求对象进入管道的其余部分之前控制其创建和执行。这意味着对于单个请求环境,策略可以创建多个请求对象。

    可以使用新的 pyramid.config.Configurator.set_execution_policy() 配置指令。

    使用此功能的第一个库是 pyramid_retry .

    Pyramid的默认值 execution policy 将尝试处理和呈现未捕获的异常。这是一个微妙但基本的变化,表明 exception view 可能期望在违约之外调用 EXCVIEW 吐温。有各种谓词可用于帮助为管道的各个部分定义有效的异常视图。例如, pyramid_tm 定义 tm_active=True 谓词,可应用于需要访问默认事务的异常视图。一般来说,这意味着异常视图可能会覆盖更多可能的错误条件,包括放置的中间层发生异常时。 OVER 这个 EXCVIEW 吐温。如有必要,在提供 response 对象,您可以检查 request.exceptionrequest.exc_info 以确定响应是否由异常生成。参见https://github.com/pylons/pyramid/pull/2964

  • CSRF支持已从会话中重构为它自己的独立API。 pyramid.csrf 模块。它支持可插拔的 pyramid.interfaces.ICSRFStoragePolicy 它可以用来定义您自己的机制来生成和验证CSRF令牌。默认情况下,Pyramid继续使用 pyramid.csrf.LegacySessionCSRFStoragePolicy 使用 request.session.get_csrf_tokenrequest.session.new_csrf_token API在引擎盖下,以保持与旧的Pyramid应用程序的兼容性。还有两个新的保险单要运来, pyramid.csrf.SessionCSRFStoragePolicypyramid.csrf.CookieCSRFStoragePolicy 它将分别在会话和独立cookie中存储CSRF令牌。可以使用新的 pyramid.config.Configurator.set_csrf_storage_policy() 配置指令。

    应通过新的 pyramid.csrf.get_csrf_token()pyramid.csrf.new_csrf_token()pyramid.csrf.check_csrf_token() API以便在存储策略更改时继续工作。此外, pyramid.csrf.get_csrf_token() 函数现在被注入到模板中,以便在UI代码中使用。

    请参阅https://github.com/pylons/pyramid/pull/2854和https://github.com/pylons/pyramid/pull/3019

次要功能添加

废弃

  • Pyramid目前依赖于 plaster_pastedeploy 简化到 plaster 通过维护对ini文件的集成支持。这种依赖 plaster_pastedeploy 应被视为服从Pyramid的贬低政策,并可能在未来被移除。应用应取决于适当的石膏结合,以满足他们的需要。

  • 从会话中检索CSRF令牌已被弃用,取而代之的是 pyramid.csrf 模块。CSRF方法 (ISession.get_csrf_tokenISession.new_csrf_token )不再需要 pyramid.interfaces.ISession 接口,使用默认值时除外 pyramid.csrf.LegacySessionCSRFStoragePolicy .

    也, pyramid.session.check_csrf_token 现在位于 pyramid.csrf.check_csrf_token()pyramid.session.check_csrf_origin 被移到 pyramid.csrf.check_csrf_origin() .

    请参阅https://github.com/pylons/pyramid/pull/2854和https://github.com/pylons/pyramid/pull/3019

向后不兼容

  • request.exceptionrequest.exc_info 只有在excview tween生成响应时才会设置。这是为了避免在管道中的其他位置生成响应,而不是与原始异常直接相关时出现任何混淆。如果上游的任何人想要捕获并呈现异常的响应,他们应该设置 request.exceptionrequest.exc_info 它们自己指示在生成响应时被压扁的异常。

    类似的行为发生在 pyramid.request.Request.invoke_exception_view() 其中,如果方法成功生成响应,则将异常属性设置为反映异常。

    这是一个非常小的不相容性。现在大多数孩子会优先考虑提出的例外,而忽略 request.exception . 这一变化只是通过试图更清楚地了解响应与其压扁的异常之间的关系来改进和澄清簿记。请参阅https://github.com/pylons/pyramid/pull/3029和https://github.com/pylons/pyramid/pull/3031

文档增强功能