Pyramid1.7的新功能¶
本文解释了 Pyramid 与前代版本相比,1.7版 Pyramid 1.6。它还记录了两个版本之间的向后不兼容以及添加到 Pyramid 1.7,以及软件依赖性更改和显著的文档添加。
向后不兼容¶
的默认哈希算法
pyramid.authentication.AuthTktAuthenticationPolicy
已从更改md5
到sha512
. 如果您正在使用身份验证策略,并且需要继续使用md5
,请明确设置hashalg='md5'
.如果您当前没有指定
hashalg
选项,则此更改意味着任何现有的身份验证票证(和关联的cookie)将不再有效,用户将注销,并且必须重新登录到其帐户。自年以来,此更改一直发出弃用警告。 Pyramid 1.4。
参见https://github.com/pylons/pyramid/pull/2496
python 2.6和3.2不再受Pyramid的支持。参见https://github.com/pylons/pyramid/issues/2368和https://github.com/pylons/pyramid/pull/2256
这个
pyramid.session.check_csrf_token()
函数不再验证请求查询字符串中的CSRF令牌。只支持头和请求主体。参见https://github.com/pylons/pyramid/pull/2500全局权限集通过
pyramid.config.Configurator.set_default_permission()
将不再影响异常视图。必须在视图上显式设置权限,才能强制执行该视图。参见https://github.com/pylons/pyramid/pull/2534
功能添加¶
一个新的 视图推导程序 概念已添加到Pyramid中,允许框架作者将元素插入到标准Pyramid视图管道中,并影响应用程序中的所有视图。这与decorator类似,只是它可以访问传递给
config.add_view
并且可能影响管道的其他阶段,例如视图中的原始响应或安全检查之前的原始响应。参见https://github.com/pylons/pyramid/pull/2021增加了一个
require_csrf
查看选项,该选项将对请求强制使用RFC2616定义的不安全方法进行CSRF检查。如果CSRF检查失败BadCSRFToken
异常将被引发并可能被异常视图捕获(默认响应是400 Bad Request
)应使用此选项代替已弃用的check_csrf
视图谓词,通常会导致意外404 Not Found
响应客户端而不是可捕获的异常。见 自动检查CSRF令牌 ,https://github.com/pylons/pyramid/pull/2413和https://github.com/pylons/pyramid/pull/2500添加了一个新方法,
pyramid.config.Configurator.set_csrf_default_options()
,用于配置require_csrf=True
查看选项。此方法可用于为应用程序中的每个视图全局启用CSRF检查。对于建立在Pyramid上的网站来说,这应该是一个很好的默认值。通过设置,可以根据每个视图选择退出CSRF检查require_csrf=False
关于这些观点。见 自动检查CSRF令牌 以及https://github.com/pylons/pyramid/pull/2413和https://github.com/pylons/pyramid/pull/2518添加了一个额外的CSRF验证,用于检查请求的来源/引用并确保其与当前请求匹配
request.domain
. 此特定检查仅在通过HTTPS访问网站时有效,否则浏览器不会始终发送所需信息。如果额外的CSRF验证失败,BadCSRFOrigin
异常将被引发并可能被异常视图捕获(默认响应为400 Bad Request
)可通过设置配置其他允许的来源pyramid.csrf_trusted_origins
允许的域名列表(如果在非标准端口上,则带有端口)。除非域名前面加了前缀,否则不允许使用子域。.
. 参见https://github.com/pylons/pyramid/pull/2501增加了一个新的
pyramid.session.check_csrf_origin()
用于根据请求的域验证源或引用头的API。参见https://github.com/pylons/pyramid/pull/2501亚类
pyramid.httpexceptions.HTTPException
现在将考虑客户的最佳匹配Accept
根据请求的内容返回text/html
,application/json
或text/plain
. 默认值为*/*
仍然是text/html
但如果application/json
它现在将收到一个有效的JSON响应。参见https://github.com/pylons/pyramid/pull/2489一个新的事件,
pyramid.events.BeforeTraversal
和接口pyramid.interfaces.IBeforeTraversal
在路由器中开始遍历之前通知侦听器。见 请求处理 以及https://github.com/pylons/pyramid/pull/2469和https://github.com/pylons/pyramid/pull/1876一种新的方法,
pyramid.request.Request.invoke_exception_view()
,可用于调用异常视图并返回响应。这对于在EXCVIEW
吐温,你可能需要更多的控制要求。参见https://github.com/pylons/pyramid/pull/2393全局权限集通过
pyramid.config.Configurator.set_default_permission()
将不再影响异常视图。必须在视图上显式设置权限,才能强制执行该视图。参见https://github.com/pylons/pyramid/pull/2534允许领导
=
在请求参数谓词的键上。例如,'=abc=1'
等于request.params['=abc'] == '1'
. 参见https://github.com/pylons/pyramid/pull/1370允许使用变量替换,例如
%(LOGGING_LOGGER_ROOT_LEVEL)s
用于记录.ini文件的节并从pserve
命令行——例如:pserve development.ini LOGGING_LOGGER_ROOT_LEVEL=DEBUG
这种支持多亏了新的
global_conf
选择权pyramid.paster.setup_logging()
. 参见https://github.com/pylons/pyramid/pull/2399这个
pyramid.tweens.EXCVIEW
如果找不到异常视图来处理,Tween现在将重新引发原始异常。这允许另一个tween或中间件在上游处理异常。参见https://github.com/pylons/pyramid/pull/2567
废弃¶
这个
check_csrf
视图谓词已被弃用。使用新的require_csrf
选项或pyramid.require_default_csrf
设置以确保pyramid.exceptions.BadCSRFToken
引发异常。参见https://github.com/pylons/pyramid/pull/2413python 3.3的支持将在1.8Pyramid中移除。https://github.com/pylons/pyramid/issues/2477
脚手架增强¶
全面检修
alchemy
scaffold展示了与sqlAlchemy会话管理相关的更现代的最佳实践,以及更模块化的配置方法,将路由划分为单独的模块以说明pyramid.config.Configurator.include()
. 参见https://github.com/pylons/pyramid/pull/2024
文档增强功能¶
在https://github.com/pylons/pyramid/pull/2468中完成了对文档中使用的包装和工具的大检修。总结如下:
所有文档现在建议使用
pip
而不是easy_install
.安装文档现在期望用户使用python 3.4或更高版本来访问
python3 -m venv
创建虚拟环境的工具。教程现在使用
py.test
和pytest-cov
而不是nose
和coverage
.对脚手架以及教程及其SRC文件的进一步更新。
随着 alchemy
脚手架彻底检修了 sqlacalchemy+url调度wiki教程 教程将更多的现代特性引入到使用带Pyramid的sqlacalchemy中,并为新项目提供更好的起点。更多信息请参见https://github.com/pylons/pyramid/pull/2024。重点是:
新的sqlAlchemy会话管理,无任何全局
DBSession
. 按请求替换为request.dbsession
财产。一个新的认证章节演示了如何在应用程序中快速启动简单的认证。
对授权进行了大修,以显示每个路由上下文工厂的使用情况,这些工厂在简单的组级授权的基础上演示对象级授权。是否要将页面编辑限制为仅所有者,但以前无法确定?干得好!
用户和组现在存储在数据库中,而不是存储在特定于教程的全局变量中。
用户密码存储使用
bcrypt
.