Pyramid1.7的新功能

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

向后不兼容

  • 的默认哈希算法 pyramid.authentication.AuthTktAuthenticationPolicy 已从更改 md5sha512 . 如果您正在使用身份验证策略,并且需要继续使用 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/htmlapplication/jsontext/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

废弃

脚手架增强

  • 全面检修 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.testpytest-cov 而不是 nosecoverage .

  • 对脚手架以及教程及其SRC文件的进一步更新。

随着 alchemy 脚手架彻底检修了 sqlacalchemy+url调度wiki教程 教程将更多的现代特性引入到使用带Pyramid的sqlacalchemy中,并为新项目提供更好的起点。更多信息请参见https://github.com/pylons/pyramid/pull/2024。重点是:

  • 新的sqlAlchemy会话管理,无任何全局 DBSession . 按请求替换为 request.dbsession 财产。

  • 一个新的认证章节演示了如何在应用程序中快速启动简单的认证。

  • 对授权进行了大修,以显示每个路由上下文工厂的使用情况,这些工厂在简单的组级授权的基础上演示对象级授权。是否要将页面编辑限制为仅所有者,但以前无法确定?干得好!

  • 用户和组现在存储在数据库中,而不是存储在特定于教程的全局变量中。

  • 用户密码存储使用 bcrypt .