Pyramid1.2的新功能

本文解释了 Pyramid 1.2版与其前代版本相比, Pyramid 1.1。它还记录了两个版本之间的向后不兼容,以及添加到Pyramid1.2的拒绝,以及软件依赖性更改和显著的文档添加。

主要功能添加

Pyramid1.2中的主要功能添加如下。

调试工具栏

Pyramid附带的脚手架包现在包含一个调试工具栏组件,该组件可用于交互式调试应用程序。见 调试工具栏 更多信息。

route_prefix 要包含的参数

这个 pyramid.config.Configurator.include() 方法现在接受 route_prefix 参数。这个参数允许您从不同的包中组合URL调度应用程序。见 使用路由前缀组成应用程序 更多信息。

吐温

A tween 用于包装Pyramid路由器的主要请求处理功能。这是一个特性,可以被Pyramid框架扩展所使用,例如,提供视图定时支持,并且可以提供一个方便的地方来挂起簿记代码。粗呢有点像 WSGI middleware 但可以访问Pyramid功能,如渲染器和全功能请求对象。

为了支持这个特性,存在一个名为 pyramid.config.Configurator.add_tween() . 此指令添加了一个“tween”。

粗花呢在 登记吐温 .

现在存在一个新的粘贴程序命令: paster ptweens . 此命令打印应用程序的当前tween配置。见标题部分 ptweens :显示“Tweens” 更多信息。

脚手架变更

  • 所有脚手架现在都使用 pyramid_tm 包而不是 repoze.tm2 middleware 管理交易管理。

  • ZODB脚手架现在使用 pyramid_zodbconn 包而不是 repoze.zodbconn 提供ZODB集成的包。

  • 所有脚手架现在都使用 pyramid_debugtoolbar 包而不是 WebError 提供交互式调试功能的包。

  • 通过脚手架创建的项目不再依赖于 WebError 包;配置在 production.ini 用于要求其 error_catcher middleware 已删除。配置错误捕获/电子邮件发送现在是 pyramid_exclog 包(请参阅https://docs.pylonsproject.org/projects/pyramid-exclog/en/latest/)。

  • 所有脚手架现在都发送 cache_max_age 参数 add_static_view 方法。

次要功能添加

  • 这个 [pshell] ini配置文件中的节现在处理 setup 键作为点名称,指向传递给引导环境的可调用项。它可以根据需要在 paster pshell 会话。此功能在 写剧本 .

  • 名为的新配置设置 pyramid.includes 现在可用。其描述见 包括包裹 .

  • 增加了一个 pyramid.security.NO_PERMISSION_REQUIRED 用于的常量 permission= 查看配置的语句。此常量的值为字符串 __no_permission_required__ . 这个字符串值以前在文档中引用过;现在文档使用常量。

  • 添加了一种基于装饰器的配置响应适配器的方法: pyramid.response.response_adapter . 这个装饰器和 pyramid.config.Configurator.add_response_adapter() 但它是声明性的。

  • 这个 pyramid.events.BeforeRender 事件现在有一个名为 rendering_val . 这可用于自省beforerender订阅服务器中视图返回的值。

  • Pyramid调试记录器现在使用标准的日志配置(通常通过粘贴作为启动的一部分来设置)。这意味着,例如 debug_notfounddebug_authorization 等将进入正常的测井通道。调试记录器的记录器名称将是 呼叫者 配置器的构造函数。

  • 请求对象上有一个新属性可用: exc_info . 它的价值将是 None 直到一个异常被Pyramid路由器捕获,之后它将是 sys.exc_info() .

  • pyramid.testing.DummyRequest 现在实现 add_finished_callbackadd_response_callback 方法实施者 pyramid.request.Request .

  • 新的方法 pyramid.config.Configurator 类: set_authentication_policy()set_authorization_policy() . 这些内容主要由希望提供注册安全策略的包的附加组件作者使用。

  • 新的配置器方法: pyramid.config.Configurator.set_root_factory() ,可以在构造配置器之后设置根工厂。

  • Pyramid不再急切地在提交一些默认的配置语句 Configurator 构造时间,允许将值作为构造函数参数传入(例如 authentication_policyauthorization_policy )覆盖通过 pyramid.config.Configurator.include() 方法。

  • 更好的mako渲染异常;当mako渲染引发异常时,将显示导致错误的模板行。

  • 新的请求方法: current_route_url()current_route_path()static_path() .

  • 中的新功能 pyramid.url 模块: current_route_path()static_path() .

  • 这个 pyramid.request.Request.static_url() API(及其同类产品) pyramid.request.Request.static_path()pyramid.url.static_url()pyramid.url.static_path() )现在接受绝对文件名作为“path”参数。只要文件名位于以前注册为静态视图的目录中,就会生成指向资产的URL。以前,尝试使用绝对文件路径生成资产的URL会引发ValueError。

  • 这个 RemoteUserAuthenticationPolicyAuthTktAuthenticationPolicySessionAuthenticationPolicy 构造函数现在接受一个名为 debug . 默认情况下,此关键字参数为 False . 当它是 True ,当 authenticated_userideffective_principals 对这些策略中的任何一个调用方法。当试图诊断与身份验证相关的问题时,生成的输出可能很有用。

  • 新建视图谓词: match_param . 示例:通过添加的视图 config.add_view(aview, match_param='action=edit') 只有当 request.matchdict 其中有一个名为的值 action 具有价值 edit .

  • 支持一个 onerror 关键字参数 pyramid.config.Configurator.scan() . 此参数传递给 venusian.Scanner.scan() 在扫描期间引发异常时影响错误行为。

  • 这个 request_method 谓词参数 pyramid.config.Configurator.add_view()pyramid.config.Configurator.add_route() 现在允许是HTTP方法名的元组。以前它被限制为表示单个HTTP方法名的字符串。

  • 未删节的 pyramid.traversal.find_modelpyramid.traversal.model_pathpyramid.traversal.model_path_tuplepyramid.url.model_url 在Pyramid1.0中都被弃用了。把它们作为它们重命名后的别名永远保留下来,只需要很少的成本。 resource_* 带前缀的函数。

  • 未删节的 pyramid.view.bfg_view 在Pyramid1.0中已弃用。这是一个低成本的别名 pyramid.view.view_config 我们将永远留在这里。

  • 路由模式替换标记名称现在可以以下划线开头。请参阅https://github.com/pylons/pyramid/issues/276。

废弃

  • 所有Pyramid相关 deployment settings (例如) debug_alldebug_notfound )现在要加前缀 pyramid. . 例如: debug_all > pyramid.debug_all . 旧的无前缀设置将无限期地继续工作,但提供这些设置可能会打印一个拒绝警告。所有脚手架和教程都已更改为使用前缀设置。

  • 这个 deployment settings 当您试图通过 __getattr__ 而不是通过 __getitem__ .

向后不兼容

  • 如果字符串作为 debug_logger 参数 Configurator ,该字符串被认为是全局python记录器的名称,而不是记录器实例的点状名称。

  • 这个 pyramid.config.Configurator.include() 方法现在只接受一个 callable 参数。一 序列 过去允许的可调用文件。如果你超过一个 callablepyramid.config.Configurator.include() ,它会断裂。现在您必须对每个可调用的方法进行单独的调用。

  • 在使用“自动提交”时,可能需要更strict地对配置路由和视图语句进行排序。 Configurator . 在过去,当您使用自动提交配置程序时,可以在添加具有该名称的路由之前添加一个名为路由名称的视图。例如:

    config = Configurator(autocommit=True)
    config.add_view('my.pkg.someview', route_name='foo')
    config.add_route('foo', '/foo')
    

    当视图试图添加自身时,上述操作将引发异常。现在,在添加视图之前必须添加路由:

    config = Configurator(autocommit=True)
    config.add_route('foo', '/foo')
    config.add_view('my.pkg.someview', route_name='foo')
    

    这不会影响“普通”用户,只影响那些拥有使用自动提交配置器的遗留BFG代码库的用户,并且可能会影响使用configuratorapi(由 pyramid.testing.setUp() 是自动提交配置程序)。解决此问题的正确方法是使用默认的非自动提交配置程序,该配置程序没有这些指令排序要求:

      config = Configurator()
      config.add_view('my.pkg.someview', route_name='foo')
      config.add_route('foo', '/foo')
    
    The above will work fine.
    
  • 这个 pyramid.config.Configurator.add_route() 指令不再返回路由对象。为了使路由与视图配置处理正常工作,需要进行此更改。

行为差异

  • 当服务静态文件时,不再设置etag头。设置最后修改的标题。

  • 静态文件服务不再支持 wsgi.file_wrapper 延伸。

  • 而不是返回 403 Forbidden 错误:当提供的静态文件由于文件权限而无法被Pyramid进程的用户访问时,将引发IOERROR(或类似的)错误。

文档增强功能

  • 使用 route_urlroute_pathresource_urlstatic_urlcurrent_route_url 中的函数 pyramid.url 包现在已更改为使用请求的同名方法。

  • 添加了一个标题为 使用路由前缀组成应用程序 到“URL发送”叙述性文档一章。

  • 向API文档添加了一个新模块: pyramid.tweens .

  • 增加了一个 登记吐温 章节到“Hook”叙述章节。

  • 增加了一个 ptweens :显示“Tweens” 章节到“命令行Pyramid”的叙述章节。

  • 添加的文档 显式吐温结构包括包裹 到“环境变量和 .ini 文件设置”章节。

  • 增加了一个 登录 叙述性文件的章节。

  • 所有教程现在都使用- route_urlroute_pathresource_urlstatic_urlcurrent_route_url 方法 pyramid.request.Request 而不是从 pyramid.url .

  • zodb wiki教程现在使用 pyramid_zodbconn 包而不是 repoze.zodbconn 提供ZODB集成的包。

  • 补充 金字塔的独特之处 引言叙述章节。

依赖关系更改

  • Pyramid现在依赖于pastescript>=1.7.4。此版本包含允许灵活日志配置的重要功能。

  • Pyramid现在需要金星1.0A1或更好的支持 onerror 关键字参数 pyramid.config.Configurator.scan() .

  • 这个 zope.configuration 包不再是依赖项。