Pyramid1.0的新功能¶
本文解释了Pyramid1.0版与前代版本相比的新特性, repoze.bfg 1.3。它还记录了两个版本之间的向后不兼容性,以及添加到Pyramid1.0的拒绝,以及软件依赖性更改和显著的文档添加。
主要功能添加¶
Pyramid1.0中增加的主要功能包括:
与塔架项目的新名称和品牌关联。
bfg转换脚本
脚手架改进
术语更改
更好的平台兼容性和支持
直接内置支持Mako模板语言。
内置会话支持。
更新的URL调度功能
更好的命令扩展性
ZCML外化
在渲染期间更好地支持全局模板变量
视图映射器
测试系统改进
身份验证支持改进
文档改进
新名称和品牌¶
的名字 repoze.bfg 已更改为Pyramid。该项目现在也是一个新实体“塔架项目”的子项目。塔架项目是一个Web框架相关技术集合的项目名称。Pyramid是塔架项目的第一个项目。随着时间的推移,集合中的其他包也被添加了,例如对pylons 1用户以及前zope用户有用的支持包。Pyramid是两者的继承者 repoze.bfg 和 Pylons 版本1。
Pyramid代码基几乎完全来自 repoze.bfg 为了桥塔1的兼容性做了一些改动。
Pyramid在技术上是向后的,与 repoze.bfg ,因为它有一个新的包名称,所以旧的导入来自 repoze.bfg 如果您对现有模块不做任何操作,模块将失败。 repoze.bfg 应用。但是,在Pyramid上使用现有的bfg应用程序不需要做太多的工作。这是一种自动化,它将更改大多数导入语句和zcml声明。有关升级说明,请参阅https://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/tutorials/bfg/index.html。
塔架1用户将需要做更多的工作来使用Pyramid,因为Pyramid与塔架不共享“DNA”。希望随着时间的推移,文档和升级代码将被开发出来,以帮助桥塔1用户更容易地过渡到Pyramid。
repoze.bfg 版本1.3将是它的最后一个主要版本。将对关键的错误修复进行小更新。塔架版本1将继续看到维修版本,以及。
回购项目将继续存在。Repoze将能够重新获得其最初的关注点:将Zope技术引入WSGi。流行的 repoze.bfg 因为它自己的网络框架阻碍了这一目标。
我们希望首先吸引人们的是塔架项目所体现的合作精神和发展社区的融合。牺牲一点主权并共同努力需要谦逊。相反,项目的复刻或分裂在开源世界中更为常见。我们觉得在“顶级”python web框架的空间中氧气有限,而且我们不通过过度拥挤来为python社区提供服务。通过合并 repoze.bfg 以及哲学上类似的桥塔社区,都获得了更多的观众和更大的成功机会。
bfg转换脚本¶
这个 bfg2pyramid 转换脚本对现有的 repoze.bfg 应用到Pyramid。该过程在“将BFG应用程序转换为Pyramid”中进行了描述。
脚手架改进¶
脚手架现在有了更好的CSS和图形。
这个
development.ini由所有脚手架生成的,现在配置为默认使用WebError交互式异常调试器。所有脚手架都已规范化:现在每个脚手架都使用名称
main表示返回wsgi应用程序的函数,现在每个函数的development.ini样式都大致相同。所有现有的脚手架现在都使用“强制”配置。 (
starter,routesalchemy,alchemy,zodb)而不是ZCML配置。这个
pyramid_zodb,routesalchemy和pyramid_alchemy当配置repoze.tm2中的事务管理器development.ini. 这将防止在响应状态代码在400或500范围内时提交事务。参见
另请参见https://repozetm2.readthedocs.io/en/latest/using-a-commit-veto。
术语更改¶
以前被称为“模型”的Pyramid概念现在被称为“资源”。因此,已生成以下API重命名。旧名称的向后兼容性垫片在所有情况下都保持原位:
pyramid.url.model_url -> pyramid.url.resource_url pyramid.traversal.find_model -> pyramid.url.find_resource pyramid.traversal.model_path -> pyramid.traversal.resource_path pyramid.traversal.model_path_tuple -> pyramid.traversal.resource_path_tuple pyramid.traversal.ModelGraphTraverser -> pyramid.traversal.ResourceTreeTraverser pyramid.config.Configurator.testing_models -> pyramid.config.Configurator.testing_resources pyramid.testing.registerModels -> pyramid.testing.registerResources pyramid.testing.DummyModel -> pyramid.testing.DummyResource
以前提到“模型”的所有文档现在都提到“资源”。
这个
starter脚手架现在有一个resources.py模块而不是models.py模块。各种API的位置参数名称已从
model到resource.以前被称为“资源”的Pyramid概念现在被称为“资产”。因此,进行了以下API更改。如有必要,向后兼容性垫片已保留到位:
pyramid.config.Configurator.absolute_resource_spec -> pyramid.config.Configurator.absolute_asset_spec pyramid.config.Configurator.override_resource -> pyramid.config.Configurator.override_asset
(非API)模块以前称为
pyramid.resource现在被称为pyramid.asset.以前提到“资源规格”的所有文档现在都提到“资产规格”。
以前称为
BFG_RELOAD_RESOURCES(EnVaR)或reload_resources(配置文件)现在分别称为PYRAMID_RELOAD_ASSETS和reload_assets.
更好的平台兼容性和支持¶
我们已经让Pyramid的测试套件通过了Jython和Pypy。不过,变色龙也不适用于这两个平台,所以您需要在这些平台上使用mako或jinja2模板。
会议¶
Pyramid现在有内置的会话支持,记录在 会议 . 会话实现是可插入的。它还提供了Flash消息和跨站点脚本保护功能。
使用 request.session 现在返回(类似字典的)会话对象,如果 session factory 已配置。
存在配置器构造函数的新参数: session_factory 配置器上存在一种新方法: pyramid.config.Configurator.set_session_factory() .
鲭鲨¶
除了变色龙模板,Pyramid现在还提供内置支持 Mako 模板。见 可用的附加模板系统绑定 更多信息。
URL调度¶
URL调度现在允许替换标记位于模式中的任何位置,而不是紧跟
/.URL调度现在使用表单
{{marker}}在路线图中表示替换标记,而不是:marker. 为了向后兼容,仍然接受旧的冒号样式标记语法。新格式允许使用该标记位置的正则表达式,而不是默认的[^/]+,例如{{marker:\d+}}现在有效,要求标记为数字。添加了新的API
pyramid.url.current_route_url(),它根据“当前”路由(如果有)及其matchdict值计算URL。增加了一个
paster proute显示路由表摘要的命令。参见标题为 proutes :显示所有应用程序路由 .补充
debug_routematch配置设置(可在.ini文件)记录匹配的路由,包括matchdict和谓词。添加
pyramid.url.route_path()API,允许人们生成相对的URL。打电话route_path和打电话一样吗pyramid.url.route_url()有了参数_app_url等于空字符串。添加
pyramid.request.Request.route_path()应用程序编程接口。这是调用pyramid.url.route_url().添加了类变量
matchdict和matched_route到pyramid.request.Request. 每个设置为None当请求期间路由不匹配时。
ZCML外化¶
这个
load_zcml配置器的方法已从Pyramid核心中删除。加载zcml现在是 pyramid_zcml 软件包,可以从pypi下载。见 documentation for the package ,它描述了如何将配置语句添加到main阻止重新加入此方法。您还需要添加install_requires依赖于pyramid_zcml分发到您的setup.py文件。“声明性配置”叙述章节已被删除(它被移到
pyramid_zcml包装)。在叙述章节中对zcml的大多数引用都被删除或重定向到
pyramid_zcml位置。这个
starter_zcml贴纸脚手架已移到pyramid_zcml包。
强制两相配置¶
为了支持应用程序的可扩展性, Pyramid Configurator 默认情况下,现在检测配置冲突,并允许您强制包含来自其他包或模块的配置。默认情况下,它还将在两个单独的阶段执行配置。这允许您在某些情况下忽略相对配置语句排序。见 高级配置 更多信息。
这个 pyramid.config.Configurator.add_directive() 允许框架扩展器向配置器添加方法,这允许扩展器避免将配置器子类化,而只是添加方法。见 通过向配置器添加方法 add_directive 更多信息。
周围的应用程序配置 config.begin() 和 config.end() 不再需要。所有脚手架都已更改为不再调用这些函数。
在渲染期间更好地支持全局模板变量¶
名为的新事件类型 pyramid.interfaces.IBeforeRender 现在作为事件发送,然后调用渲染器。应用程序现在可以订阅 IBeforeRender 事件类型,以便在将渲染器全局数据集传递给渲染器之前对其进行内省和修改。事件对象iself有一个类似字典的接口,可以用于此目的。例如::
from repoze.events import subscriber
from pyramid.interfaces import IRendererGlobalsEvent
@subscriber(IRendererGlobalsEvent)
def add_global(event):
event['mykey'] = 'foo'
视图映射器¶
已提取“视图映射器”子系统,该子系统允许框架扩展程序控制如何构造和调用视图可调用文件。此功能对“平民”不有用,只对扩展编写器有用。见 使用视图映射器 更多信息。
测试支持改进¶
这个 pyramid.testing.setUp() 和 pyramid.testing.tearDown() API尚未预先准备好。它们现在是测试配置的规范设置和拆卸API,取代了配置器的“直接”创建。这是一个设计用来提供一个外观的变更,它可以防止将来的配置程序被拒绝。
身份验证支持改进¶
这个
pyramid.interfaces.IAuthenticationPolicy接口现在指定unauthenticated_userid方法。此方法支持使用不支持对象缓存且希望创建“用户对象”作为请求属性的持久存储的用户所需的重要优化。新的API已添加到
pyramid.security模块命名unauthenticated_userid. 此API函数调用unauthenticated_userid有效安全策略的方法。类
pyramid.authentication.AuthTktCookieHelper现在是API。此类可供第三方身份验证策略开发人员用于帮助进行身份验证cookie设置的机制。这个
pyramid.authentication.AuthTktAuthenticationPolicy现在接受tokens参数通过pyramid.security.remember(). 值必须是字符串序列。令牌被放入auth-tkt“tokens”字段,并返回到auth-tkt cookie中。增加了一个
wild_domain参数pyramid.authentication.AuthTktAuthenticationPolicy,默认为True. 如果设置为False,将关闭使用Wilcard域设置cookie的策略功能。
文档改进¶
凯西·邓肯,一个好朋友,一位优秀的技术作家,给了我们专业编辑整个Pyramid文档集的天赋。文档中的任何错误都是开发团队的,所有的改进都是他的。
“资源位置和视图查找”一章已被Rob Miller的“关于遍历的很多麻烦”(最初发布在http s://web.archive.org/web/20150603023226/http://blog.nonequitarian.org/2010/much ado about traversal/)的变体所取代。
许多用户贡献了文档修复和改进,包括Ben Bangert、Blaise Laflamme、Rob Miller、Mike Orr、Carlos de la Guardia、Paul Everitt、Tres Seaver、John Shipman、Marius Gedminas、Chris Rossi、Joachim Krebs、Xavier Spriet、Reed O'Brien、William Chambers、Charlie Choiniere和Jamaludin Ahmad。
次要功能添加¶
这个
settings传递给配置程序的字典现在可用作config.registry.settings在配置代码和request.registry.settings在视图代码中)。pyramid.config.Configurator.add_view()现在接受decorator关键字参数,一个可调用项,它将在将视图可调用项添加到注册表之前修饰该视图。允许在请求时通过名为的请求属性重写视图注册期间提供的静态呈现器
override_renderer,它应该是以前注册的渲染器的名称。使用现有渲染视图提供“全向呈现”RPC很有用。如果资源实现
__resource_url__方法,它将作为调用pyramid.url.resource_url()函数生成URL,覆盖默认逻辑。见 生成资源的URL 更多信息。名字
registry现在可在pshell默认环境。它是应用程序注册表对象。通过捕获
NotImplementedError进口simplejson从django.utils.增加了
pyramid.httpexceptions模块,它是webob.exc模块。新类:
pyramid.response.Response. 这是一个纯粹的表面webob.Response(旧代码不需要更改就可以使用这个外观,它的存在主要是为了虚荣和文档生成的目的)。请求现在具有一个新属性:
tmpl_context为了塔架用户的利益。的新API方法
pyramid.request.Request:model_url,route_url和static_url. 这些是它们各自在pyramid.url.
向后不兼容¶
当A
pyramid.exceptions.Forbidden出现错误,其状态代码为403 Forbidden. 以前是这样的401 Unauthorized,以便向后兼容repoze.bfg. 此更改将给使用Pyramid的用户带来问题repoze.who,截取401 Unauthorized默认情况下,但允许403 Forbidden通过。这些部署需要配置repoze.who对…也有反应403 Forbidden. 为此,请使用repoze。challenge_decider看起来像这样:import zope.interface from repoze.who.interfaces import IChallengeDecider def challenge_decider(environ, status, headers): return status.startswith('403') or status.startswith('401') zope.interface.directlyProvides(challenge_decider, IChallengeDecider)
这个
paster bfgshell命令现在称为paster pshell.不再有
IDebugLogger对象注册为名称为的命名实用程序repoze.bfg.debug.这些已弃用的API已被删除:
pyramid.testing.registerViewPermission,pyramid.testing.registerRoutesMapper,pyramid.request.get_request,pyramid.security.Unauthorized,pyramid.view.view_execution_permitted,pyramid.view.NotFound所有内置金星装饰师的金星“类别”(例如
subscriberandview_config/bfg_view现在pyramid而不是bfg.这个
pyramid.renderers.rendered_response功能已删除;使用pyramid.renderers.render_to_response()相反。渲染器工厂现在接受 渲染器信息对象 而不是绝对资源规范或绝对路径。对象具有以下属性:
name(therenderer=价值)package(找到呈现程序配置语句时的“当前包”),type:渲染器类型,registry:当前注册表,以及settings:部署设置字典。第三方repoze.bfg必须移植到Pyramid的渲染器实现需要考虑到这一点。此更改主要是为了支持更灵活的Mako模板呈现。钥匙的存在
repoze.bfg.message在wsgi环境中,当发生异常时,现在不推荐使用。相反,依赖此环境值的代码应该使用exception请求的属性(例如request.exception[0])检索消息。价值观
bfg_localizer和bfg_locale_name在国际化期间为了缓存而保留在请求中的永远不是API。但是这些已经变成了localizer和locale_name,分别。默认值
cookie_name价值观pyramid.authentication.AuthTktAuthenticationPolicy现在默认为auth_tkt(过去它默认为repoze.bfg.auth_tkt)这个
pyramid.testing.zcml_configure()API已被删除。从那时起,它就被广告称为已被删除。repoze.bfg1.2A1,但实际上没有。所有环境变量的前缀
BFG_现在前缀为PYRAMID_(例如)BFG_DEBUG_NOTFOUND现在是PYRAMID_DEBUG_NOTFOUND)自从
pyramid.interfaces.IAuthenticationPolicy接口现在指定策略实现必须实现unauthenticated_userid方法,所有第三方自定义身份验证策略现在都必须实现此方法。但是,只有当名为pyramid.security.unauthenticated_userid()是被调用的,所以如果您不调用它,您将不会注意到任何问题。这个
configure_zcml部署设置中的设置(在**settings传到Pyramidmain功能)不再有任何意义。这个
make_app函数已从中删除pyramid.router模块。它继续生活在pyramid_zcml包。这就离开了pyramid.router没有任何API函数的模块。
折旧和行为差异¶
pyramid.configuration.Configurator现已弃用。使用pyramid.config.Configurator,传递其构造函数autocommit=True相反。这个pyramid.configuration.Configurator别名的寿命将很长,因为每个应用程序都会使用它,但是它的导入现在会发出一个拒绝警告。这个pyramid.config.Configurator类的API与pyramid.configuration.Configurator类,它的意思是替换,但默认情况下它是 non-autocommitting 配置器。现在已弃用pyramid.configuration.Configurator将在每次调用配置方法时自动提交。这个pyramid.configuration模块仍保留,但已弃用。使用pyramid.config相反。这个
pyramid.settings.get_settings()API现已弃用。使用pyramid.threadlocals.get_current_registry().settings或者使用settings请求中可用的注册表属性 (request.registry.settings)以前称为
pyramid.view.bfg_view现在最正式的是pyramid.view.view_config在文档和脚手架中。获得
settings对象通孔registry.{{get|query}}Utility(ISettings)现已弃用。相反,获得settings对象通过registry.settings属性。向注册表对象添加了向后兼容性填充程序,以便在以下情况下将设置对象注册为ISettings实用程序setattr(registry, 'settings', foo)已调用,但将在以后的版本中删除。获得
settings对象通孔pyramid.settings.get_settings()现已弃用。把它作为settings立即获取注册表的属性(通过pyramid.threadlocal.get_registry()或作为request.registry)
依赖关系更改¶
取决于金星>=0.5(用于扫描冲突异常装饰)。
文档增强功能¶
增加了一个
pyramid.httpexceptionsAPI文档章节。增加了一个
pyramid.sessionAPI文档章节。为添加了API章节
pyramid.response模块。增加了一个 会议 叙述性文件章节。
先前提到的所有文件
webob.Response现在使用pyramid.response.Response相反。已经对文档进行了大修,以使用强制配置,将声明性配置(ZCML)解释移动到外部包中, pyramid_zcml .
远离的
zodbsessions教程章节。它仍然很有用,但是我们现在有了一个与之竞争的会话工厂抽象,并且在两种方法上维护文档会分散注意力。添加了一个示例
WebTest测试叙述章节的功能测试 创建功能测试 .通过调用与资源相关的API的示例扩展了参考资料一章。
添加“Pyramid提供了一种以上的方法来完成它”来设计防御文档。
(弱)“将CMF应用程序转换为Pyramid”教程已从教程部分中删除。它被移到
pyramid_tutorialsGithub存储库,位于https://github.com/pylons/pyramid-tutorials/commit/38351561b54a2b07e3af5b4f83964f72d0c05e。将“使用ZODB与Zeo”和“使用Pyramid内的repoze.catalog”教程移出核心文档,并移入Pyramid教程网站(https://github.com/pylons/pyramid_tutorials/commit/86cfd11d8a4093b39cedc86fc6f005db4bccb00)。
已删除的API文档
pyramid.testingAPI命名registerDummySecurityPolicy,registerResources,registerModels,registerEventListener,registerTemplateRenderer,registerDummyRenderer,registerView,registerUtility,registerAdapter,registerSubscriber,registerRoute和registerSettings.