Pyramid1.9的新功能¶
本文解释了 Pyramid 与之前的版本相比,1.9版 Pyramid 1.8。它还记录了两个版本之间的向后不兼容以及添加到 Pyramid 1.9,以及软件依赖性更改和显著的文档添加。
主要功能添加¶
所有人使用的文件格式
p*
命令行脚本,例如pserve
和pshell
以及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.exception
或request.exc_info
以确定响应是否由异常生成。参见https://github.com/pylons/pyramid/pull/2964CSRF支持已从会话中重构为它自己的独立API。
pyramid.csrf
模块。它支持可插拔的pyramid.interfaces.ICSRFStoragePolicy
它可以用来定义您自己的机制来生成和验证CSRF令牌。默认情况下,Pyramid继续使用pyramid.csrf.LegacySessionCSRFStoragePolicy
使用request.session.get_csrf_token
和request.session.new_csrf_token
API在引擎盖下,以保持与旧的Pyramid应用程序的兼容性。还有两个新的保险单要运来,pyramid.csrf.SessionCSRFStoragePolicy
和pyramid.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
次要功能添加¶
支持一个
open_url
中的配置设置pserve
配置文件的节。此URL用于在以下情况下打开Web浏览器:pserve --browser
被调用。当此设置不可用时,pserve
脚本将尝试从server:<server_name>
配置文件的一部分,但不要求以这种格式运行服务器,因此它可能会失败。参见https://github.com/pylons/pyramid/pull/2984这个
pyramid.config.Configurator
现在可以用作上下文管理器,它将自动推送/弹出线程局部变量(类似于pyramid.config.Configurator.begin()
和pyramid.config.Configurator.end()
)它还将自动执行pyramid.config.Configurator.commit()
最后,建议只在应用程序的顶层使用。参见https://github.com/pylons/pyramid/pull/2874线程局部变量现在可在通过调用的任何函数中使用。
pyramid.config.Configurator.include()
. 这意味着唯一不能依赖线程局部变量的配置时代码是从主系统内部的非操作执行的代码。这可以通过调用pyramid.config.Configurator.begin()
和pyramid.config.Configurator.end()
或者使用配置器的新上下文管理器特性。参见https://github.com/pylons/pyramid/pull/2989线程局部变量现在在通过调用的异常视图中可用。
pyramid.request.Request.invoke_exception_view()
即使当request
参数被重写。参见https://github.com/pylons/pyramid/pull/3060当不支持的谓词提供给
pyramid.config.Configurator.add_view()
,pyramid.config.Configurator.add_route()
和pyramid.config.Configurator.add_subscriber()
输出一条更有用的错误消息,并猜测该谓词的用途。见https://github.com/pylons/pyramid/pull/3054将权限结果规范化为适当的类层次结构。
pyramid.security.ACLAllowed
现在是的子类pyramid.security.Allowed
和pyramid.security.ACLDenied
现在是的子类pyramid.security.Denied
. 参见https://github.com/pylons/pyramid/pull/3084添加
quote_via
参数pyramid.encode.urlencode()
遵循stdlib的版本并启用自定义引用函数。参见https://github.com/pylons/pyramid/pull/3088支持 _query=None and _ 锚=没有 :meth:`pyramid.request.Request.route_url 以及
query=None
和anchor=None
在里面pyramid.request.Request.resource_url()
. 以前这会导致 ? 和A # ,分别位于URL中,后面没有任何内容。现在,不必要的部分将从生成的URL中删除。参见https://github.com/pylons/pyramid/pull/3034
废弃¶
Pyramid目前依赖于
plaster_pastedeploy
简化到plaster
通过维护对ini文件的集成支持。这种依赖plaster_pastedeploy
应被视为服从Pyramid的贬低政策,并可能在未来被移除。应用应取决于适当的石膏结合,以满足他们的需要。从会话中检索CSRF令牌已被弃用,取而代之的是
pyramid.csrf
模块。CSRF方法 (ISession.get_csrf_token
和ISession.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.exception
和request.exc_info
只有在excview tween生成响应时才会设置。这是为了避免在管道中的其他位置生成响应,而不是与原始异常直接相关时出现任何混淆。如果上游的任何人想要捕获并呈现异常的响应,他们应该设置request.exception
和request.exc_info
它们自己指示在生成响应时被压扁的异常。类似的行为发生在
pyramid.request.Request.invoke_exception_view()
其中,如果方法成功生成响应,则将异常属性设置为反映异常。这是一个非常小的不相容性。现在大多数孩子会优先考虑提出的例外,而忽略
request.exception
. 这一变化只是通过试图更清楚地了解响应与其压扁的异常之间的关系来改进和澄清簿记。请参阅https://github.com/pylons/pyramid/pull/3029和https://github.com/pylons/pyramid/pull/3031
文档增强功能¶
增加了 execution policy 到中的路由图 请求处理 . 参见https://github.com/pylons/pyramid/pull/2993