Pyramid 改变历史¶
未发布的¶
特征¶
金字塔增加了对Python3.11的支持。
通过以下方式添加了HTTP 418错误代码 pyramid.httpexceptions.HTTPImATeapot 。请参阅https://github.com/Pylons/pyramid/pull/3667
基于Python3.11而不是Python3.8的测试中的覆盖率报告。
漏洞修补¶
在对STATIC_VIEW请求文件时,删除了对路径中空字节的支持。虽然HTTP规范允许使用空字节,但由于对空字节的处理可能会导致安全漏洞,因此不再支持空字节。
这修复了由于Python3.11.0到3.11.4中的错误而存在的安全漏洞,从而允许意外泄露
index.html静态视图路径上的一个目录。感谢LAC公司的Masashi Yamane报道了这一问题。
向后不兼容¶
对STATIC_VIEW的请求不再允许在路径段的任何部分包含空字节。
金字塔不再在上进行测试,也不支持Python3.6
金字塔删除了对I18N模块中的L*getText()方法的支持。从3.8开始,它们就在PythonGetText模块中被弃用,并在Python3.11中被删除。
文件变更¶
2.0(2021-02-28)¶
与2.0b1相比没有变化。
2.0b1(2021-02-20)¶
中断电势参考循环的时间间隔
request和context。请参阅https://github.com/Pylons/pyramid/pull/3649删除
update_wrapper从…pyramid.decorator.reify。请参阅https://github.com/Pylons/pyramid/pull/3657
2.0b0(2020-12-15)¶
彻底修改教程并更新Cookiecuter以淡化重点
request.user赞成request.identity用于常见用例。请参阅https://github.com/Pylons/pyramid/pull/3629使用cookiecutters附带的内置夹具改进文档和模式。请参阅https://github.com/Pylons/pyramid/pull/3629
2.0a0(2020-11-29)¶
特征¶
添加对Python3.9的支持。请参阅https://github.com/Pylons/pyramid/issues/3622
这个
aslist方法现在可以在拼合时处理非字符串对象。请参阅https://github.com/Pylons/pyramid/pull/3594现在可以将多个值传递给
header路由和视图配置的谓词。看到了吗pyramid拉金字塔/76添加对Python3.8的支持。看到了吗https://github.com/Pylons/pyramid/pull/3547
添加了新的安全API,以支持对身份验证和授权系统进行大规模检查。有关使用此新系统的信息,请阅读文档“金字塔2.0中的新特性”一章中的“升级身份验证/授权”。
pyramid.config.Configurator.set_security_policy.pyramid.interfaces.ISecurityPolicypyramid.request.Request.identity。pyramid.request.Request.is_authenticatedpyramid.authentication.SessionAuthenticationHelperpyramid.authorization.ACLHelperis_authenticated=True/False路由和视图配置的谓词
看到了吗https://github.com/Pylons/pyramid/pull/3465以及https://github.com/Pylons/pyramid/pull/3598
更改了默认值
serializer在……上面pyramid.session.SignedCookieSessionFactory要使用pyramid.session.JSONSerializer而不是pyramid.session.PickleSerializer。请阅读文档“金字塔2.0中的新特性”一章中的“升级会话序列化”,了解有关为什么进行此更改的更多信息。请参阅https://github.com/Pylons/pyramid/pull/3413现在可以控制路由模式与路由前缀组合时是否包含尾随斜杠,使用
config.include(..., route_prefix=...)或with config.route_prefix_context(...). 这可以通过指定一个空模式并设置新参数来完成。inherit_slash=True. 例如:with config.route_prefix_context('/users'): config.add_route('users', '', inherit_slash=True)
在这个例子中,得到的模式是
/users. 同样,如果路由前缀是/users/最后的模式是/users/. 如果pattern是'/',那么最终模式将始终是/users/. 此新设置仅在提供给add_route是空字符串 ('')参见https://github.com/pylons/pyramid/pull/3420不再定义
pyramid.request.Request.json_body它已经由WebOB提供。这允许现在可以设置属性。参见https://github.com/pylons/pyramid/pull/3447改善调试信息
pyramid.view.view_config装饰工。看到了吗https://github.com/Pylons/pyramid/pull/3483一个新参数,
allow_no_origin,已添加到pyramid.config.Configurator.set_default_csrf_options以及pyramid.csrf.check_csrf_origin. 此选项控制是否拒绝没有Origin或Referer头-通常是用户将其浏览器配置为不发送Referer即使是在同一个域请求中也有隐私原因。默认情况下,拒绝没有已知来源的请求。也可以允许Origin: null通过将其添加到pyramid.csrf_trusted_origins在设置中列出。看到了吗https://github.com/Pylons/pyramid/pull/3512以及https://github.com/Pylons/pyramid/pull/3518一个新参数,
check_origin,已添加到pyramid.config.Configurator.set_default_csrf_options完全禁用原点检查。看到了吗https://github.com/Pylons/pyramid/pull/3518补充
pyramid.interfaces.IPredicateInfo它将传递给谓词工厂的对象定义为它们的第二个参数。看到了吗https://github.com/Pylons/pyramid/pull/3514通过使用
content_encodings的参数pyramid.config.Configurator.add_static_view和pyramid.static.static_view. 看到了吗https://github.com/Pylons/pyramid/pull/3537固定
DeprecationWarning通过使用imp模块。看到了吗https://github.com/Pylons/pyramid/pull/3553通过属性创建
config.add_request_method(..., property=True)orrequest.set_propertyused to be readonly. They can now be overridden viarequest.foo = ...在删除该值之前,它将返回重写的值。这在测试中模拟请求属性时非常有用。看到了吗https://github.com/Pylons/pyramid/pull/3559完成的回调现在作为
closer作为pyramid.scripting.prepare和pyramid.paster.bootstrap. 看到了吗https://github.com/Pylons/pyramid/pull/3561补充
pyramid.request.RequestLocalCache它可用于创建在请求之间共享的简单对象,并可用于存储每个请求的数据。当数据源在请求本身之外时,这很有用。一个具体化的属性通常通过pyramid.config.Configurator.add_request_method或pyramid.decorator.reify,当访问请求属性时按需生成数据时,这些功能非常有用。然而,通常情况下,数据是在访问其他系统时生成的,然后我们希望在请求期间缓存数据。看到了吗https://github.com/Pylons/pyramid/pull/3561暴露的
pyramid.authorization.ALL_PERMISSIONS和pyramid.authorization.DENY_ALL这样,所有与ACL相关的常量现在都可以从pyramid.authorization命名空间。看到了吗https://github.com/Pylons/pyramid/pull/3563pserve现在将详细消息输出到 stderr 而不是 stdout 规避默认情况下存在的缓冲问题 stdout . 看到了吗https://github.com/Pylons/pyramid/pull/3593
废弃¶
不建议使用身份验证和授权接口以及基于主体的支持。有关等效API的信息和升级说明,请参阅文档“金字塔2.0中的新特性”一章中的“升级身份验证/授权”。由于此更改,以下API已弃用:
pyramid.config.Configurator.set_authentication_policypyramid.config.Configurator.set_authorization_policypyramid.interfaces.IAuthenticationPolicypyramid.interfaces.IAuthorizationPolicypyramid.request.Request.effective_principalspyramid.request.Request.unauthenticated_useridpyramid.authentication.AuthTktAuthenticationPolicypyramid.authentication.RemoteUserAuthenticationPolicypyramid.authentication.RepozeWho1AuthenticationPolicypyramid.authentication.SessionAuthenticationPolicypyramid.authentication.BasicAuthAuthenticationPolicypyramid.authorization.ACLAuthorizationPolicy这个
effective_principals查看和路由谓词。
看到了吗https://github.com/Pylons/pyramid/pull/3465
已弃用
pyramid.security.principals_allowed_by_permission. 此方法继续使用不推荐的pyramid.interfaces.IAuthorizationPolicy但不能与新的pyramid.interfaces.ISecurityPolicy. 看到了吗https://github.com/Pylons/pyramid/pull/3465不推荐使用的几个与ACL相关的方面
pyramid.security. 现在应该从pyramid.authorization命名空间。这包括:pyramid.security.Everyonepyramid.security.Authenticatedpyramid.security.ALL_PERMISSIONSpyramid.security.DENY_ALLpyramid.security.ACLAllowedpyramid.security.ACLDenied
看到了吗https://github.com/Pylons/pyramid/pull/3563
已弃用
pyramid.session.PickleSerializer。请参见https://github.com/pylons/pyramid/issues/2709,和https://github.com/pylons/pyramid/pull/3353,和https://github.com/pylons/pyramid/pull/3413
向后不兼容¶
取消对Python 2.7、3.4和3.5的支持。请参见https://github.com/Pylons/pyramid/pull/3421,和https://github.com/Pylons/pyramid/pull/3547,和https://github.com/Pylons/pyramid/pull/3634
移除
pyramid.compat模块。集成商应使用six模块或供应商垫片,他们正在使用到自己的代码库前进。https://github.com/Pylons/金字塔/pull/3421pcreate而内置的脚手架也被拆除,以便使用cookiecutter工具与pyramid-cookiecutter-startercookiecutter 。在Pyramid1.8中,脚本和脚手架被弃用。参见https://github.com/pylons/pyramid/pull/3406更改了默认值
hashalg在pyramid.authentication.AuthTktCookieHelper到sha512. 看到了吗https://github.com/Pylons/pyramid/pull/3557远离的
pyramid.interfaces.ITemplateRenderer. 自Pyramid1.5以来,此接口已被弃用,它是类似pyramid_mako和pyramid_chameleon但Pyramid本身没有提供任何功能。参见https://github.com/pylons/pyramid/pull/3409远离的
pyramid.security.has_permission,pyramid.security.authenticated_userid,pyramid.security.unauthenticated_userid和pyramid.security.effective_principals. 这些方法在Pyramid1.5中已被弃用,所有方法都具有可作为请求属性使用的等价物。例如,request.authenticated_userid. 参见https://github.com/pylons/pyramid/pull/3410已删除对向提供媒体范围的支持
accept两者的谓词pyramid.config.Configurator.add_view和pyramid.config.Configurator.add_route. 这些选项在Pyramid1.10和Webob 1.8中被弃用,因为它们导致无法控制的匹配不符合RFC。参见https://github.com/pylons/pyramid/pull/3411远离的
pyramid.session.UnencryptedCookieSessionFactoryConfig. 此会话工厂已替换为pyramid.session.SignedCookieSessionFactory在Pyramid1.5中,从那时起就被弃用了。参见https://github.com/pylons/pyramid/pull/3412远离的
pyramid.session.signed_serialize和pyramid.session.signed_deserialize. 这些方法只在现在被删除的pyramid.session.UnencryptedCookieSessionFactoryConfig并且与易受攻击的pickle序列化格式耦合,如果密钥受到破坏,则可能导致删除代码执行。参见https://github.com/pylons/pyramid/pull/3412更改了默认值
serializer在……上面pyramid.session.SignedCookieSessionFactory要使用pyramid.session.JSONSerializer而不是pyramid.session.PickleSerializer。请阅读文档“金字塔2.0中的新特性”一章中的“升级会话序列化”,了解有关为什么进行此更改的更多信息。请参阅https://github.com/Pylons/pyramid/pull/3413pyramid.request.Request.invoke_exception_view将不再由默认执行策略调用。看到了吗https://github.com/Pylons/pyramid/pull/3496pyramid.config.Configurator.scan默认情况下,将不再执行为以下类别注册的金星装饰器回调'pyramid'. 要查找任何不考虑类别的装饰器,请指定config.scan(..., categories=None). 看到了吗https://github.com/Pylons/pyramid/pull/3510谓词工厂的第二个参数已从
config到info,的实例pyramid.interfaces.IPredicateInfo. 这限制了谓词可用的数据,但仍然提供了包、注册表、设置和点式名称解析程序,它们应该涵盖大多数用例,并且在很大程度上是向后兼容的。看到了吗https://github.com/Pylons/pyramid/pull/3514移除
check_csrf谓语。相反,使用pyramid.config.Configurator.set_default_csrf_options以及require_csrf视图选项以启用自动CSRF检查。看到了吗https://github.com/Pylons/pyramid/pull/3521更新的默认行为
pyramid.authenticationAuthTktAuthenticationPolicy和pyramid.authentication.AuthTktCookieHelper在没有指定其他域约束的情况下,只设置一个没有域参数的cookie。在此之前,wild_domain=False(违约)实际上与wild_domain=True,其中定义了一个cookie,以便浏览器将它用于请求的域以及任何子域。在新行为中,默认情况下,cookies只影响当前域,而不影响子域。看到了吗https://github.com/Pylons/pyramid/pull/3587
文件变更¶
在阅读文档时恢复PDF的构建。参见https://github.com/pylons/pyramid/issues/3290
修复Sphinx2.0的文档构建。看到了吗https://github.com/Pylons/pyramid/pull/3480
对wiki和wiki2教程进行了重要的更新,以演示新的安全策略的用法,以及更适合生产的测试工具。看到了吗https://github.com/Pylons/pyramid/pull/3557
1.10(2018年10月31日)¶
1.10b1无重大变化。
1.10b1(2018年10月28日)¶
漏洞修补¶
修复
pyramid.testing.DummyRequest支持新的request.acceptAPI使acceptable_offers即使在代码将值设置为字符串时也可用。参见https://github.com/pylons/pyramid/pull/3396修复不推荐使用的转义序列,为python 3.8做准备。参见https://github.com/pylons/pyramid/pull/3400
1.10A1(2018年10月15日)¶
特征¶
添加
_depth和_category所有金星装饰师的参数。这个_category参数可用于影响在执行config.scan(..., category=...)具有特定类别。这个_depth当用自己的方法包装装饰器时,应该使用参数。这一变化影响pyramid.view.view_config,pyramid.view.exception_view_config,pyramid.view.forbidden_view_config,pyramid.view.notfound_view_config,pyramid.events.subscriber和pyramid.response.response_adapter装饰工。请参阅https://github.com/pylons/pyramid/pull/3105和https://github.com/pylons/pyramid/pull/3122修复
pyramid.request.Request使用后的类名set_property或config.add_request_method这样str(request.__class__)将表现为pyramid.request.Request而不是pyramid.util.Request. 参见https://github.com/pylons/pyramid/pull/3129在
cherrypy_server_runner更喜欢从cheroot打包旧版导入源 cherrypy.wsgiserver . 参见https://github.com/pylons/pyramid/pull/3235添加上下文管理器
route_prefix_context到pyramid.config.Configurator为了方便设置include和add_route在上下文中调用。参见https://github.com/pylons/pyramid/pull/3279修改内置会话实现以支持
SameSitecookie上的选项并将默认值设置为'Lax'. 这种影响pyramid.session.BaseCookieSessionFactory,pyramid.session.SignedCookieSessionFactory和pyramid.session.UnencryptedCookieSessionFactoryConfig. 参见https://github.com/pylons/pyramid/pull/3300修改
pyramid.authentication.AuthTktAuthenticationPolicy和pyramid.csrf.CookieCSRFStoragePolicy支持SameSitecookies上的选项,并将默认值设置为'Lax'. 参见https://github.com/pylons/pyramid/pull/3319新增
pyramid.httpexceptions.HTTPPermanentRedirectHTTP 308重定向的异常/响应对象。参见https://github.com/pylons/pyramid/pull/3302内
pshell,允许用户定义setup函数是一个生成器,在这种情况下,它可以包装命令的生命周期。参见https://github.com/pylons/pyramid/pull/3318内
pshell,变量由[pshell]设置在用户定义的setup功能。参见https://github.com/pylons/pyramid/pull/3318添加对python 3.7的支持。在python 3.8上添加允许失败的测试。参见https://github.com/pylons/pyramid/pull/3333
增加了
pyramid.config.Configurator.add_accept_view_order指令,允许用户在多个视图匹配等不明确情况下指定媒体类型首选项。默认的排序是为更喜欢人类可读的HTML/文本响应而不是JSON的媒体类型定义的。参见https://github.com/pylons/pyramid/pull/3326支持中的媒体类型列表
accept中使用的谓词pyramid.config.Configurator.add_route. 参见https://github.com/pylons/pyramid/pull/3326补充
pyramid.session.JSONSerializer. 有关此功能的详细信息,请参阅文档“会话”一章中的“Pyramid2.0中即将对Isession进行的更改”。参见https://github.com/pylons/pyramid/pull/3353添加
registry参数pyramid.renderers.get_renderer允许用户在渲染器查找期间避免线程局部变量。参见https://github.com/pylons/pyramid/pull/3358Pyramid的测试套件不再与通用轮一起分发。参见https://github.com/pylons/pyramid/pull/3387
所有的python代码现在都使用
black. 参见https://github.com/pylons/pyramid/pull/3388
漏洞修补¶
设置适当
code和title上的属性HTTPClientError和HTTPServerError异常类。这可以防止意外返回520错误代码。参见https://github.com/pylons/pyramid/pull/3280替换
webob.acceptparse.MIMEAccept来自WebObwebob.acceptparse.create_accept_header在HTTP异常处理代码中。老年人MIMEAccept已弃用。新方法更接近于RFC。参见https://github.com/pylons/pyramid/pull/3251捕获其他错误,如
AttributeError当取消选择“可信”会话cookie时,其中包含错误的pickle数据。当在不应该共享会话cookie的项目之间共享秘密时,例如在开发中的项目之间重用秘密时,就会发生这种情况。参见https://github.com/pylons/pyramid/pull/3325
废弃¶
这个
pyramid.interfaces.ISession接口将移动到金字塔2.0中需要JSON可序列化对象。有关此更改的详细信息,请参阅文档“会话”一章中的“金字塔2.0中即将对Isession进行的更改”。参见https://github.com/pylons/pyramid/pull/3353这个
pyramid.session.signed_serialize和pyramid.session.signed_deserialize函数将在Pyramid2.0中删除,同时删除pyramid.session.UnencryptedCookieSessionFactoryConfig在Pyramid1.5中被弃用。请切换到使用SignedCookieSessionFactory,如果仍在使用这些功能,则复制代码或其他会话实现。参见https://github.com/pylons/pyramid/pull/3353中的媒体范围已弃用
accept的参数pyramid.config.Configurator.add_route. 使用显式媒体类型列表add_route支持多种类型。中的媒体范围已弃用
accept的参数pyramid.config.Configurator.add_view. 范围到没有替换add_view但经过多次讨论,工作流在面对各种客户端提供的Accept标题。参见https://github.com/pylons/pyramid/pull/3326
向后不兼容¶
在python 3.4+
repoze.lru相关性已删除。如果你直接在你的应用程序中使用这个软件包,你应该确保你在你的项目中直接依赖它。参见https://github.com/pylons/pyramid/pull/3140移除
permission论证从pyramid.config.Configurator.add_route. 这是一个从Pyramid1.5中删除的特征遗留下来的参数,从那时起就没有任何效果。参见https://github.com/pylons/pyramid/pull/3299将内置会话实现修改为
SameSite='Lax'饼干。这种影响pyramid.session.BaseCookieSessionFactory,pyramid.session.SignedCookieSessionFactory和pyramid.session.UnencryptedCookieSessionFactoryConfig. 参见https://github.com/pylons/pyramid/pull/3300中定义的变量
[pshell]设置部分将不再覆盖由setup功能。参见https://github.com/pylons/pyramid/pull/3318pyramid.config.Configurator.add_notfound_view使用默认重定向类异常pyramid.httpexceptions.HTTPTemporaryRedirect而不是上一个pyramid.httpexceptions.HTTPFound. 参见https://github.com/pylons/pyramid/pull/3328远离的
pyramid.config.Configurator.set_request_property从Pyramid1.5开始就被弃用了。代替使用pyramid.config.Configurator.add_request_method具有reify=True或property=True. 参见https://github.com/pylons/pyramid/pull/3368移除
principal关键字参数来自pyramid.security.remember从Pyramid1.6开始就被弃用,取而代之的是userid参数。参见https://github.com/pylons/pyramid/pull/3369移除
pyramid.tests用于包含Pyramid测试套件的子包。这些更改还更改了存储库的格式,以便将代码移动到src文件夹。参见https://github.com/pylons/pyramid/pull/3387
文件变更¶
广告支持阅读文档道德广告。请参阅https://github.com/pylons/pyramid/pull/3360和https://docs.read the docs.io/en/latest/advertising/ethical-advertising.html
添加对alembic的支持到Pyramid烹饪者炼金术烹饪者,并更新wiki2教程来解释它是如何工作的。参见https://github.com/pylons/pyramid/pull/3307和https://github.com/pylons/pyramid-cookiecutter-alchemy/pull/7
在setup.py中将sphinx凹凸到大于等于1.7.4以支持
emphasize-lines在PDF中,为Xeletex支持铺平道路。请参阅https://github.com/pylons/pyramid/pull/3271、https://github.com/pylons/pyramid/issues/667和https://github.com/pylons/pyramid/issues/2572。在快速教程中添加了额外的测试。参见https://github.com/pylons/pyramid/pull/3375
1.9(2017-06-26)¶
1.9B1无重大变化。
更新的文档链接
docs.pylonsproject.org使用HTTPS。
1.9B1(2017年6月19日)¶
在提供未知谓词时添加信息性错误消息。新消息根据已知谓词列表建议了其他选项。见https://github.com/pylons/pyramid/pull/3054
为cookiecutters、scaffolds中的javascripts添加了完整性属性,并在教程中生成了源文件。参见https://github.com/pylons/pyramid/issues/2548
更新releasing.txt以更新cookiecutters。更改cookiecutter URL以使用快捷方式。参见https://github.com/pylons/pyramid/issues/3042
确保在从调用视图执行期间推送正确的线程局部变量
request.invoke_exception_view. 参见https://github.com/pylons/pyramid/pull/3060修正一个错误
pyramid.security.ALL_PERMISSIONS未能在其中返回有效的迭代器__iter__实施。参见https://github.com/pylons/pyramid/pull/3074将权限结果规范化为适当的类层次结构。
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 _ 锚=没有 ``request.route_url` 以及
query=None和anchor=None在里面request.resource_url. 以前这会导致 ? 和A # ,分别位于URL中,后面没有任何内容。现在,不必要的部分将从生成的URL中删除。参见https://github.com/pylons/pyramid/pull/3034改造
IRouterAPI使用IExecutionPolicy强制推/弹出请求线程局部变量。这个IRouter.make_request(environ)API已被替换为IRouter.request_context(environ)它应该用作上下文管理器。参见https://github.com/pylons/pyramid/pull/3086
1.9A2(2017年5月9日)¶
向后不兼容¶
request.exception和request.exc_info只有在excview tween生成响应时才会设置。这是为了避免在管道中的其他位置生成响应,而不是与原始异常直接相关时出现任何混淆。如果上游的任何人想要捕获并呈现异常的响应,他们应该设置request.exception和request.exc_info它们自己指示在生成响应时被压扁的异常。类似的行为发生在
request.invoke_exception_view其中,如果方法成功生成响应,则将异常属性设置为反映异常。这是一个非常小的不相容性。现在大多数孩子会优先考虑提出的例外,而忽略
request.exception. 这一变化只是通过试图更清楚地了解响应与其压扁的异常之间的关系来改进和澄清簿记。请参阅https://github.com/pylons/pyramid/pull/3029和https://github.com/pylons/pyramid/pull/3031
1.9A1(2017年5月1日)¶
主要特征¶
所有人使用的文件格式
p*命令行脚本,例如pserve和pshell以及pyramid.paster.bootstrap由于对 plaster .到目前为止,Pyramid仍在运输中,并集成了对pastedeploy ini格式的支持,具体取决于 plaster_pastedeploy 绑定库。这在将来可能会改变。
参见https://github.com/pylons/pyramid/pull/2985
向请求管道添加了执行策略Hook。执行策略能够在请求对象进入管道的其余部分之前控制其创建和执行。这意味着对于单个请求环境,策略可以创建多个请求对象。
使用此功能的第一个库是 pyramid_retry .
参见https://github.com/pylons/pyramid/pull/2964
CSRF支持已从会话中重构为它自己的独立API。
pyramid.csrf模块。它支持可插拔的pyramid.interfaces.ICSRFStoragePolicy它可以用来定义您自己的机制来生成和验证CSRF令牌。默认情况下,Pyramid继续使用pyramid.csrf.LegacySessionCSRFStoragePolicy使用request.session.get_csrf_token和request.session.new_csrf_tokenAPI在引擎盖下以保持兼容性。还有两个新的保险单要运来,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_tokenAPI以便在存储策略更改时继续工作。此外,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现在可以用作上下文管理器,它将自动推送/弹出线程局部变量(类似于config.begin()和config.end())它还将自动执行config.commit()因此,建议只在应用程序的顶层使用。参见https://github.com/pylons/pyramid/pull/2874线程局部变量现在可在通过调用的任何函数中使用。
config.include. 这意味着唯一不能依赖线程局部变量的配置时代码是从主系统内部的非操作执行的代码。这可以通过调用config.begin()和config.end()或者使用配置器的新上下文管理器特性。参见https://github.com/pylons/pyramid/pull/2989
漏洞修补¶
httpException接受一个细节Kwarg,该细节可用于向异常传递附加细节。只要对象具有有效的 __str__ 方法。参见https://github.com/pylons/pyramid/pull/2951
修复导致内存泄漏的引用循环,在该循环中注册表将保留
Configurator即使在配置程序被丢弃之后,实例仍处于活动状态。还为global_registries对象,在该对象中,注册表存储在一个闭包中,以防止释放它。参见https://github.com/pylons/pyramid/pull/2967修复直接调用的错误
pyramid.scripts.pserve.main与--reload其中的选项sys.argv总是在子流程中使用,而不是在提供的argv. 参见https://github.com/pylons/pyramid/pull/2962
废弃¶
Pyramid目前依赖于
plaster_pastedeploy简化到plaster通过维护对ini文件的集成支持。这种依赖plaster_pastedeploy应被视为服从Pyramid的贬低政策,并可能在未来被移除。应用应取决于适当的石膏结合,以满足他们的需要。从会话中检索CSRF令牌已被弃用,取而代之的是
pyramid.csrf模块。CSRF方法 (ISession.get_csrf_token和ISession.new_csrf_token)不再需要ISession接口,使用默认值时除外pyramid.csrf.LegacySessionCSRFStoragePolicy.也,
pyramid.session.check_csrf_token现在位于pyramid.csrf.check_csrf_token.请参阅https://github.com/pylons/pyramid/pull/2854和https://github.com/pylons/pyramid/pull/3019
文件变更¶
在“请求处理”一章的路由图中添加了执行策略。参见https://github.com/pylons/pyramid/pull/2993
1.8(2017-01-21)¶
1.8b1无重大变化。
1.8b1(2017-01-17)¶
特征¶
增加了一个
override选择权config.add_translation_dirs允许以后调用将翻译目录置于比以前调用更高的优先级。参见https://github.com/pylons/pyramid/pull/2902
文件变更¶
改进注册表文档,讨论用作组件注册表和字典。参见https://github.com/pylons/pyramid/pull/2893
快速浏览、快速教程和大多数其他剩余的文档都更新为使用CookieCutters而不是PCreate和scaffolds。请参阅https://github.com/pylons/pyramid/pull/2888和https://github.com/pylons/pyramid/pull/2889
修复wiki2中的UnitTests,使其在Py2和Py3之间没有不同的依赖关系的情况下工作。参见https://github.com/pylons/pyramid/pull/2899
更新Windows文档以跟踪对安装程序的更新的python 3改进。参见https://github.com/pylons/pyramid/pull/2900
更新了
mod_wsgi使用CookiCutters和Apache2.4+的教程。参见https://github.com/pylons/pyramid/pull/2901
1.8A1(2016年12月25日)¶
向后不兼容¶
支持
IContextURL已删除Pyramid1.3中不推荐使用的接口。参见https://github.com/pylons/pyramid/pull/2822在Pyramid降级期间(1.6->1.8)之后,已删除对pserver的守护进程支持。这包括删除守护进程命令(start、stop、restart、status)以及以下参数:
--daemon,--pid-file,--log-file,--monitor-restart,--status,--user,--group,--stop-daemon要将服务器作为守护进程运行,应使用进程管理器而不是pserver。
参见https://github.com/pylons/pyramid/pull/2615
pcreate现在默认为交互式。如果已存在具有不同内容的文件,系统将提示您。以前,如果有类似的文件,除非您指定,否则将自动跳过它们。--interactive或--overwrite. 参见https://github.com/pylons/pyramid/pull/2775删除了未记录的参数
cachebust_match从pyramid.static.static_view. 这一论点是在Pyramid1.6中偶然提出的。参见https://github.com/pylons/pyramid/pull/2681更改静态视图以避免设置
Content-Encoding使用python猜测的编码的响应头mimetypes模块。这导致客户端在下载gzip文件时对其内容进行解码。客户最终会得到foo.txt.gz磁盘上已解码的文件,因此foo.txt. 此外,Content-Encoding仅当客户端本身广播支持通过Accept-Encoding请求头。参见https://github.com/pylons/pyramid/pull/2810设置不再作为设置对象(例如
request.registry.settings.foo)这在Pyramid1.2中被否决。参见https://github.com/pylons/pyramid/pull/2823
特征¶
python 3.6兼容性。https://github.com/pylons/pyramid/issues/2835
pcreate了解到--package-name允许您在现有文件夹中使用与项目名称不同的包名称创建新项目。参见https://github.com/pylons/pyramid/pull/2783这个
_get_credentials私有方法BasicAuthAuthenticationPolicy已提取为独立函数extract_http_basic_credentials在里面pyramid.authentication模块,此函数从request对象,并将其作为命名元组返回。参见https://github.com/pylons/pyramid/pull/2662Pyramid1.4悄悄地删除了已恢复的配置程序的一个功能。行动鉴别器也有可能在不同的行动指令之间发生冲突。参见https://github.com/pylons/pyramid/pull/2757
pyramid.paster.bootstrap和它的同胞pyramid.scripting.prepare现在可以用作上下文管理器来自动调用closer将线程局部变量从堆栈中弹出以防止内存泄漏。参见https://github.com/pylons/pyramid/pull/2760补充
pyramid.config.Configurator.add_exception_view以及pyramid.view.exception_view_config装饰者。现在可以使用这些方法或通过新的exception_only=True选择权add_view添加只在处理异常时匹配的视图。以前,还为从异常类继承的遍历上下文注册了任何异常视图,这阻止了任何仅限异常的优化。参见https://github.com/pylons/pyramid/pull/2660增加了
exception_only布尔到pyramid.interfaces.IViewDeriverInfo视图派生器可以使用它来确定是否包装只处理异常的视图。这意味着不再需要对request.exception要确定视图是否正在处理异常,可以在配置时优化管道。参见https://github.com/pylons/pyramid/pull/2660pserve现在应该和gevent以及其他需要MonkeyPatch进程的工作人员,假设服务器和/或应用程序在导入Pyramid的其余部分之前尽可能快地这样做。参见https://github.com/pylons/pyramid/pull/2797Pyramid不再复制传递给
pyramid.config.Configurator(settings=). 原文dict保持不变。参见https://github.com/pylons/pyramid/pull/2823CSRF Trusted Origins设置现在可能是一个空格分隔的域列表。以前只允许使用python列表。此外,现在可以使用
PYRAMID_CSRF_TRUSTED_ORIGINS与其他设置类似的环境变量。参见https://github.com/pylons/pyramid/pull/2823pserve --reload现在使用 hupper 用于监视文件更改的库。这带来了许多改进:如果 watchdog 安装包后,将使用inotify而不是CPU和磁盘密集型轮询来完成监视。
监视器现在是一个独立的进程,它不会崩溃并在任何代码之前启动。
在保存文件之前,监视器不会在崩溃后重新启动进程。
显示器在Windows上工作。
现在可以通过以下方式从Pyramid视图或任何其他代码手动触发重新加载:
hupper.get_reloader().trigger_reload(). 有点整洁。您可以通过发出
SIGHUP到监视器进程。
参见https://github.com/pylons/pyramid/pull/2805
一个新的
[pserve]配置文件中支持节watch_files可配置的密钥pserve --reload监视自定义文件路径。参见https://github.com/pylons/pyramid/pull/2827允许从的子类进行流式响应
pyramid.httpexceptions.HTTPException. 以前,在测试身体时会展开响应,这使得不可能对响应进行流式处理。参见https://github.com/pylons/pyramid/pull/2863通过使用新的
listen服务员的指示。参见https://github.com/pylons/pyramid/pull/2853所有P*脚本现在都使用argparse而不是optparse。这提高了他们的
--help输出并使其选项的文档更加清晰。参见https://github.com/pylons/pyramid/pull/2864通过注册的任何延迟配置操作
config.action现在可能取决于线程本地状态,如资产覆盖,在执行操作时处于活动状态。参见https://github.com/pylons/pyramid/pull/2873传递到的目录的资产规格
config.add_translation_dirs现在支持覆盖整个资产规范,包括文件夹名称。以前只支持包名称,文件夹始终需要具有相同的名称。参见https://github.com/pylons/pyramid/pull/2873config.begin()只要注册表相同,将通过传播当前线程本地请求。例如:request = Request.blank(...) config.begin(request) # pushes a request config.begin() # propagates the previous request through unchanged assert get_current_request() is request
参见https://github.com/pylons/pyramid/pull/2873
增加了一个新的
callback选择权config.set_default_csrf_options它可用于确定是否应启用CSRF检查以允许混合身份验证方法。只有基于cookie的方法通常需要CSRF检查。参见https://github.com/pylons/pyramid/pull/2778
漏洞修补¶
固定错误
proutes这样,当一个类和attr涉及。参见:https://github.com/pylons/pyramid/pull/2687修复一
FutureWarning在使用python 3.5时re.split上format设置到proutes脚本。参见https://github.com/pylons/pyramid/pull/2714修复一
RuntimeWarning当使用任意对象作为userid在AuthTktAuthenticationPolicy. 现在,策略会捕捉到这一点,并将对象序列化为base64字符串,以避免出现隐藏的警告。由于用户ID将在随后的请求中作为字符串进行读取,因此会发出一个更有用的警告,鼓励您改用基元类型。参见https://github.com/pylons/pyramid/pull/2715Pyramid1.6引入了一个动作调用另一个动作的能力。有个错误
config.add_view将与1.7Pyramid中引入的自定义视图派生器交互,因为在以较早的顺序创建视图派生器和视图谓词之前,无法计算视图的鉴别器。从另一个操作调用操作将触发管道展开,并在准备好之前计算鉴别器。新行为尊重order并确保在执行之前订单的依赖操作之前不会计算鉴别器。参见https://github.com/pylons/pyramid/pull/2757修复i18n中默认域总是使用日耳曼复数样式的错误,即使在相关消息文件中定义了不同的复数函数。参见https://github.com/pylons/pyramid/pull/2859
这个
config.override_asset方法现在发生在pyramid.config.PHASE1_CONFIG以便在调用config.add_translation_dirs. 参见https://github.com/pylons/pyramid/pull/2873
废弃¶
这个
pcreate脚本和相关的脚手架已被弃用,取而代之的是流行的 cookiecutter 项目。所有Pyramid的官方脚手架和教程都已移植到cookiecutter:
参见https://github.com/pylons/pyramid/pull/2780
文件变更¶
添加 pyramid_nacl_session 对工厂进行会话。参见https://github.com/pylons/pyramid/issues/2791
更新
HACKING.txt从从未合并到master的过时分支。参见https://github.com/pylons/pyramid/pull/2782更新了Windows安装说明和相关位。参见https://github.com/pylons/pyramid/issues/2661
修复视图谓词和路由谓词之间文档中的不一致,并突出它们的API中的差异。参见https://github.com/pylons/pyramid/pull/2764
澄清可能的误用
headersKwarg到pyramid.httpexceptions.HTTPException其中,来自父类的更合适的禁忌pyramid.response.Response应该改为使用。参见https://github.com/pylons/pyramid/pull/2750sqlacalchemy+url调度+jinja2 (
wiki2)和zodb+traversal+chameleon (wiki)已经更新了教程,以利用新的cookiecutters并放弃对pcreate脚手架。请参见https://github.com/pylons/pyramid/pull/2881和https://github.com/pylons/pyramid/pull/2883。
改进P*脚本描述的输出以获取帮助。参见https://github.com/pylons/pyramid/pull/2886
快速巡更更新使用烹饪工具,而不是创建和脚手架。参见https://github.com/pylons/pyramid/pull/2888
1.7(2016-05-19)¶
修复wiki2教程中bcrypt总是需要字节字符串的错误。参见https://github.com/pylons/pyramid/pull/2576
简化Windows检测代码并删除一些重复数据。请参阅https://github.com/pylons/pyramid/pull/2585和https://github.com/pylons/pyramid/pull/2586
1.7B4(2016-05-12)¶
修复了在找不到异常视图来处理异常的情况下,使用异常视图tween重新引发原始异常的问题。这更好地允许tweens进一步向上处理未处理的异常。以前它们会被转换成
PredicateMismatch如果谓词不允许视图处理异常,则为异常。参见https://github.com/pylons/pyramid/pull/2567暴露了
pyramid.interfaces.IRequestFactory镜像公众的接口pyramid.interfaces.IResponseFactory接口。
1.7B3(2016-05-10)¶
固定
request.invoke_exception_view养一个HTTPNotFound如果没有匹配的视图,则出现异常。以前None如果没有匹配的视图和PredicateMismatch如果视图“几乎”匹配(找到与上下文匹配的视图),则将引发。参见https://github.com/pylons/pyramid/pull/2564将py.test配置和覆盖范围的默认值添加到所有三个脚手架,并相应地更新文档。参见https://github.com/pylons/pyramid/pull/2550
添加
linkcheck到Makefile为了Sphinx。要检查文档中是否有断开的链接,请使用命令make linkcheck SPHINXBUILD=$VENV/bin/sphinx-build. 还拆除和修复了几十个断裂的外部链接。固定脚手架测试的内部转轮,确保其与PIP和PY.TEST一起工作。参见https://github.com/pylons/pyramid/pull/2565
1.7B2(2016-05-01)¶
删除了alchemy scaffold development.ini中的pyramid_tm,见https://github.com/pylons/pyramid/issues/2538。
默认权限集通过
config.set_default_permission将不再对异常视图强制执行。对于默认的异常视图,这种情况已经存在一段时间了。 (config.add_notfound_view和config.add_forbidden_view但是,对于任何其他异常视图,开发人员必须记住设置permission=NO_PERMISSION_REQUIRED或者当事情不起作用时感到惊讶。通过设置permission参数手动到config.add_view. 此行为与1.7系列中添加的新CSRF功能一致。参见https://github.com/pylons/pyramid/pull/2534
1.7B1(2016年4月25日)¶
这个版本公布了1.7的测试期。
修复了一个问题,其中一些文件被包含在从1.7系列中删除的炼金术骗局中。参见https://github.com/pylons/pyramid/issues/2525
1.7A2(2016年4月19日)¶
特征¶
默认情况下,在异常视图上禁用自动CSRF检查。通过设置适当的 require_csrf 视图上的选项。参见https://github.com/pylons/pyramid/pull/2517
自动CSRF API被改写为使用配置指令来设置选项。这个
pyramid.require_default_csrf不再支持设置。相反,一个新的config.set_default_csrf_options引入了允许开发人员指定默认值的指令require_csrf以及更改CSRF令牌、头和安全请求方法。这个pyramid.csrf_trusted_origins仍支持设置。参见https://github.com/pylons/pyramid/pull/2518
错误修复¶
CSRF源代码检查有一个错误,导致检查总是失败。参见https://github.com/pylons/pyramid/pull/2512
修复测试套件以在Windows上传递。参见https://github.com/pylons/pyramid/pull/2520
1.7A1(2016年4月16日)¶
向后不兼容¶
在Pyramid折旧期(1.4->1.6)之后,AuthtktAuthenticationPolicy的默认哈希算法从MD5更改为SHA512。如果您使用的是身份验证策略,并且需要继续使用MD5,请将hashalg显式设置为“MD5”。
此更改并不意味着任何现有的身份验证票证(和关联的cookie)将不再有效,用户将不再登录,并且必须重新登录到其帐户。
参见https://github.com/pylons/pyramid/pull/2496
这个
check_csrf_token函数不再验证请求查询字符串中的CSRF令牌。只支持头和请求主体。参见https://github.com/pylons/pyramid/pull/2500
特征¶
添加了新设置,
pyramid.require_default_csrf它可用于为应用程序中的每个POST请求全局打开CSRF检查。对于建立在Pyramid上的网站来说,这应该是一个很好的默认值。通过设置,可以根据每个视图选择退出CSRF检查require_csrf=False关于这些观点。参见https://github.com/pylons/pyramid/pull/2413增加了一个
require_csrf查看选项,该选项将使用RFC2616定义的不安全方法对任何请求执行CSRF检查。如果CSRF检查失败BadCSRFToken异常将被引发并可能被异常视图捕获(默认响应是400 Bad Request)应使用此选项代替已弃用的check_csrf视图谓词,通常会导致意外404 Not Found响应客户端而不是可捕获的异常。请参阅https://github.com/pylons/pyramid/pull/2413和https://github.com/pylons/pyramid/pull/2500添加了一个额外的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/2501pyramid httpexceptions现在将考虑客户机accept头的最佳匹配,并根据请求返回文本/html、application/json或文本/plain。默认值为 / 仍然是text/html,但如果明确提到application/json,它现在将收到有效的json响应。参见https://github.com/pylons/pyramid/pull/2489
引入了一个新的事件和接口(遍历之前),它将在路由器中开始遍历之前通知侦听器。参见https://github.com/pylons/pyramid/pull/2469和https://github.com/pylons/pyramid/pull/1876
将新的“视图派生器”概念添加到Pyramid中,以允许框架作者将元素插入到标准的Pyramid视图管道中,并影响应用程序中的所有视图。这与decorator类似,只是它可以访问传递给
config.add_view并且可能影响管道的其他阶段,例如视图中的原始响应或安全检查之前的原始响应。参见https://github.com/pylons/pyramid/pull/2021允许领导
=在请求参数谓词的键上。例如,“=abc=1”等于request.params['=abc'] == '1'. 参见https://github.com/pylons/pyramid/pull/1370一个新的
request.invoke_exception_view(...)方法,可用于调用异常视图并返回响应。这对于呈现excview tween上下文之外的异常视图很有用,因为您可能需要对请求进行更多的控制。参见https://github.com/pylons/pyramid/pull/2393允许使用变量替换,例如
%(LOGGING_LOGGER_ROOT_LEVEL)s用于记录.ini文件的节并从pserve命令行——例如:pserve development.ini LOGGING_LOGGER_ROOT_LEVEL=DEBUG参见https://github.com/pylons/pyramid/pull/2399
文件变更¶
对文件进行全面检查:
使用pip而不是简单的安装。
倾向于使用python 3.4或更高版本来简化python及其所需的打包工具的安装,从而获得一致的看法。
对工具使用venv,对创建的对象使用虚拟环境,而不是virtualenv。
使用py.test和py test cov代替鼻子和覆盖范围。
对脚手架以及教程及其SRC文件的进一步更新。
参见https://github.com/pylons/pyramid/pull/2468
全面检修
alchemyscaffold以及wiki2 sqlacalchemy+urldispatch教程将更多现代功能引入到使用sqlacalchemy with pyramid中,并为新项目提供更好的起点。参见https://github.com/pylons/pyramid/pull/2024
漏洞修补¶
固定
pserve --browser使用--server-name在选择要使用的节时,不要使用应用程序名称。例如,这仅适用于具有相同名称的服务器和应用程序部分的用户。[app:main]和[server:main]. 参见https://github.com/pylons/pyramid/pull/2292
废弃¶
这个
check_csrf视图谓词已被弃用。使用新的require_csrf选项或pyramid.require_default_csrf设置以确保BadCSRFToken引发异常。参见https://github.com/pylons/pyramid/pull/2413python 3.3的支持将在1.8Pyramid中移除。https://github.com/pylons/pyramid/issues/2477
python 2.6不再受Pyramid的支持。参见https://github.com/pylons/pyramid/issues/2368
放弃了对python 3.2的支持。参见https://github.com/pylons/pyramid/pull/2256
1.6(2016年1月3日)¶
废弃¶
继续移除
pserve通过取消预测的守护进程/进程管理功能--user和--group选项。参见https://github.com/pylons/pyramid/pull/2190
16立方(2015-12-17)¶
向后不兼容¶
移除
cachebust选项从config.add_static_view. 见config.add_cache_buster对于将缓存buster附加到Static Assets的新方法。参见https://github.com/pylons/pyramid/pull/2186修改
pyramid.interfaces.ICacheBusterAPI是一个简单的可调用的,而不是具有match和pregenerate方法。高速缓存终结者现在只专注于生成。匹配已删除。注意:这会影响
pyramid.static.QueryStringCacheBuster和pyramid.static.ManifestCacheBuster.参见https://github.com/pylons/pyramid/pull/2186
特征¶
添加新的
config.add_cache_buster用于将缓存buster附加到Static Assets的API。参见https://github.com/pylons/pyramid/pull/2186
漏洞修补¶
确保
IAssetDescriptor.abspath始终返回绝对路径。有些情况取决于进程CWD将返回相对路径。看到了吗https://github.com/Pylons/pyramid/pull/2188
1.6B2(2015年10月15日)¶
特征¶
允许将资产规格提供给
pyramid.static.ManifestCacheBuster而不需要文件系统路径。
1.6B1(2015年10月15日)¶
向后不兼容¶
IPython和BPython支持已经从核心的pshell中移除。要继续在Pyramid1.6+上使用它们,必须显式安装绑定包::
$ pip install pyramid_ipython or $ pip install pyramid_bpython
删除1.6A1中引入的默认缓存buster,包括
PathSegmentCacheBuster,PathSegmentMd5CacheBuster和QueryStringMd5CacheBuster. 参见https://github.com/pylons/pyramid/pull/2116
特征¶
附加Shell
pshell现在可以注册为入口点。参见https://github.com/pylons/pyramid/pull/1891和https://github.com/pylons/pyramid/pull/2012注入的变量
pshell现在显示文档字符串而不是默认值str(obj)如果可能的话。参见https://github.com/pylons/pyramid/pull/1929添加新
pyramid.static.ManifestCacheBuster用于外部资产管道以及叙述中常见用法的示例。参见https://github.com/pylons/pyramid/pull/2116固定
pserve --reload不要因为语法错误而崩溃!!!!参见https://github.com/pylons/pyramid/pull/2125当用户将未分析的字符串传递给
pyramid.session.CookieSession和pyramid.authentication.AuthTktCookieHelper与时间相关的参数timeout,reissue_time,max_age它需要一个整数值。参见https://github.com/pylons/pyramid/pull/2050
漏洞修补¶
pyramid.httpexceptions.HTTPException现在默认为520 Unknown Error而不是None None符合WebOB 1.5的变化。参见https://github.com/pylons/pyramid/pull/1865pshell现在将保留变量的大小写[pshell]INI文件的节。这使得向shell公开类更加简单。看到了吗https://github.com/Pylons/pyramid/pull/1883固定使用
pserve --monitor-restart --daemon会以可怕的方式失败。参见https://github.com/pylons/pyramid/pull/2118明确阻止
pserve --reload --daemon不会被使用。它从未得到支持,但会以奇怪的方式工作和失败。参见https://github.com/pylons/pyramid/pull/2119运行时修复Windows上的问题
pserve --reload其中进程无法复刻,因为找不到要运行的pserver脚本。参见https://github.com/pylons/pyramid/pull/2138
废弃¶
贬低
pserve --monitor-restart有利于用户使用真正的流程管理器(如SystemD或新贵)以及基于Python的解决方案(如Circus和Supervisor)。参见https://github.com/pylons/pyramid/pull/2120
1.6A2(2015年6月30日)¶
漏洞修补¶
确保
pyramid.httpexceptions.exception_response为返回适当的“concrete”类400和500状态代码。见https://github.com/pylons/pyramid/issues/1832修复1.6a1中引入的无限递归错误,当
pyramid.view.render_view_to_response直接或间接调用。参见https://github.com/pylons/pyramid/issues/1643通过在返回的内容前加上注释,进一步修复JSONP呈现器。这将减轻Flash的攻击(请参阅CVE-2014-4671)。参见https://github.com/pylons/pyramid/pull/1649
允许句点和括号 (
[])在jsonp回调中。原来的修复是过度限制和打破角。参见https://github.com/pylons/pyramid/pull/1649
1.6A1(2015年4月15日)¶
特征¶
如果用当前环境中已存在或可导入的项目名称的参数调用,则pcreate现在将请求确认。请参阅https://github.com/pylons/pyramid/issues/1357和https://github.com/pylons/pyramid/pull/1837
使子类成为可能
pyramid.request.Request并使用pyramid.request.Request.add_request.method. 参见https://github.com/pylons/pyramid/issues/1529这个
pyramid.config.Configurator已经增强了允许操作在提交周期内调用其他操作的能力。这使得更多的逻辑可以放在行动中,例如调用其他行动或将其分组以改进冲突检测的能力。我们还公开并记录了Pyramid使用的配置阶段,以便进一步帮助构建符合要求的插件。参见https://github.com/pylons/pyramid/pull/1513添加
pyramid.request.apply_request_extensions可用于测试以应用通过以下方式配置的任何请求扩展的函数config.add_request_method. 以前,只有通过Pyramid的路由器才能测试扩展。参见https://github.com/pylons/pyramid/pull/1581pcreate when run without a scaffold参数现在将打印缺少标志的信息以及可用脚手架的列表。参见https://github.com/pylons/pyramid/pull/1566和https://github.com/pylons/pyramid/issues/1297
增加了对“PYPY3”在TOX和Travis下的支持/测试。参见https://github.com/pylons/pyramid/pull/1469
跨PY2和PY3自动化代码覆盖度量,而不仅仅是PY2。参见https://github.com/pylons/pyramid/pull/1471
静态资源的缓存总线已添加,并且通过新参数可用于
pyramid.config.Configurator.add_static_view:cachebust. 核心API通过查询字符串和路径段为缓存总线提供,并且可以扩展到定制资产管道中。参见https://github.com/pylons/pyramid/pull/1380和https://github.com/pylons/pyramid/pull/1583添加
pyramid.config.Configurator.root_packageattribute和init参数,用于帮助包含的包解析与包相关的资源,其中Configurator创建。这对于需要从设置中加载资产规格的加载项尤其有用,在这种情况下,开发人员可以自然地定义相对于顶级包的导入或资产。参见https://github.com/pylons/pyramid/pull/1337在脚手架中的日志格式化程序中添加行号以帮助调试。参见https://github.com/pylons/pyramid/pull/1326
为状态代码添加新的HTTP异常对象
428 Precondition Required,429 Too Many Requests和431 Request Header Fields Too Large在里面pyramid.httpexceptions. 请参阅https://github.com/pylons/pyramid/pull/1372/files这个
pshell脚本现在将加载PYTHONSTARTUP文件(如果在启动解释器之前在环境中定义了一个)。参见https://github.com/pylons/pyramid/pull/1448简单地定义希望使用默认异常响应视图但谓词和其他配置选项已更改的未找到和禁止视图。这个
view参数现在是可选的config.add_notfound_view和config.add_forbidden_view…参见https://github.com/pylons/pyramid/issues/494大大提高了
pcreateshell脚本输出。参见https://github.com/pylons/pyramid/pull/1453提高在
AuthTktCookieHelper以及SignedCookieSessionFactory通过使用stdlib的hmac.compare_digest如果可用(如python 2.7.7+和3.3+)。参见https://github.com/pylons/pyramid/pull/1457当使用
config.override_asset应用程序编程接口。这使得在仍然能够使用request.static_urlAPI和config.add_static_view. 以前不可能使用config.add_static_view有绝对路径 and 生成内容的URL。此更改将取代呼叫,config.add_static_view('/abs/path', 'static')用config.add_static_view('myapp:static', 'static')和config.override_asset(to_override='myapp:static/', override_with='/abs/path/'). 这个myapp:static资产规格是完全组成的,不需要存在-它用于通过request.static_url('myapp:static/foo.png'). 参见https://github.com/pylons/pyramid/pull/1252补充
pyramid.config.Configurator.set_response_factory以及response_factory关键字参数Configurator用于定义将返回自定义Response类。参见https://github.com/pylons/pyramid/pull/1499允许从呈现器返回迭代器。以前只能返回字节或Unicode。参见https://github.com/pylons/pyramid/pull/1417
pserve现在可以采取-b或--browser在Web浏览器中打开服务器URL的选项。参见https://github.com/pylons/pyramid/pull/1533整体改善
proutes命令。补充--format和--glob命令的参数,引入了method用于显示可用请求方法的列,并改进了view通过显示模块而不是仅显示__repr__. 参见https://github.com/pylons/pyramid/pull/1488在python 3的视图中只支持关键字参数和函数注释。参见https://github.com/pylons/pyramid/pull/1556
request.response当使用pyramid.renderers.render_to_response()应用程序编程接口。现在有必要通过response=参数render_to_response如果要为渲染器提供自定义响应对象供其使用。如果不传递一个响应对象,则将使用应用程序的IResponseFactory. 几乎所有渲染器都会改变request.response响应对象(例如,JSON渲染器集request.response.content_type到application/json)但是,当调用render_to_response不期望返回的响应对象与稍后在请求中使用的响应对象相同。从返回的响应对象render_to_response现在明显不同于request.response. 这不会更改渲染器的API。参见https://github.com/pylons/pyramid/pull/1563这个
append_slash的参数`Configurator().add_notfound_view()现在将接受实现IResponse接口,并将其用作响应类,而不是默认的HTTPFound. 参见https://github.com/pylons/pyramid/pull/1610
漏洞修补¶
JSONP呈现器以这样的方式创建了javascript代码:回调变量可用于将javascript任意注入响应对象。https://github.com/pylons/pyramid/pull/1627
解决一个问题
pserve --reload如果在PDB会话期间重新加载,则会禁用终端回显。参见https://github.com/pylons/pyramid/pull/1577,https://github.com/pylons/pyramid/pull/1592pyramid.wsgi.wsgiapp和pyramid.wsgi.wsgiapp2现在提高ValueError意外通过时None. 参见https://github.com/pylons/pyramid/pull/1320解决这样一个问题:谓词可能会被分解为“内省”中的点,但在注册时不会被分解。这就意味着
add_route_predicate例如,不能取字符串并将其转换为实际的可调用函数。参见https://github.com/pylons/pyramid/pull/1306固定
pyramid.testing.setUp归还Configurator有合适的包装。以前不能使用返回的Configurator测试期间。现在有一个package也可以重写此行为的参数。参见https://github.com/pylons/pyramid/pull/1322解决以下问题:
pyramid.response.FileResponse可以在不属于的地方应用字符集。参见https://github.com/pylons/pyramid/pull/1251解决Python2.7.7在Windows中引入的一个bug,其中
mimetypes.guess_type返回内容类型的unicode而不是str,这与任何早期版本的python不同。更多信息请参见https://github.com/pylons/pyramid/issues/1360。pcreate现在,通过将连字符转换为下划线来规范化包名称。参见https://github.com/pylons/pyramid/pull/1376解决最终响应/完成回调无法向列表中添加另一个回调的问题。参见https://github.com/pylons/pyramid/pull/1373
修复不同OSS中不同mimetype导致的单元测试失败。参见https://github.com/pylons/pyramid/issues/1405
修复没有路径的静态视图资源规范的路由生成。参见https://github.com/pylons/pyramid/pull/1377
允许
pyramid.renderers.JSONP即使没有有效的请求对象,渲染器也可以工作。在这种情况下,它不会在回调中包装对象,因此其行为与pyramid.renderers.JSON渲染器。参见https://github.com/pylons/pyramid/pull/1561阻止“要加载的参数已弃用”
DeprecationWarning来自SETUPTOOLS>=11.3。参见https://github.com/pylons/pyramid/pull/1541避免共享
IRenderer当使用 renderer= 参数。这些渲染器在第一次渲染时被实例化,并在请求之间共享,导致潜在的细微影响,如 pyramid.reload_templates = true 未能在 pyramid_mako . 请参阅https://github.com/pylons/pyramid/pull/1575和https://github.com/pylons/pyramid/issues/1268避免针对CSRF令牌的定时攻击。参见https://github.com/pylons/pyramid/pull/1574
request.finished_callbacks和request.response_callbacks现在默认为iterable而不是None. 可以检查长度为0。这是1.5中的行为。
废弃¶
这个
pserve命令的后台监控功能已被弃用。这包括[start,stop,restart,status]子命令以及--daemon,--stop-server,--pid-file和--status旗帜。请在将来使用真正的流程管理器,而不是依赖
pserve去监控自己。存在许多选项,包括操作系统的服务(如systemd或upstart),以及基于python的解决方案(如circus和supervisor)。参见https://github.com/pylons/pyramid/pull/1641
更名为
principal参数pyramid.security.remember()到userid以明确其预期目的。参见https://github.com/pylons/pyramid/pull/1399
文档¶
将文档移动到
accept在Configurator.add_view不再是谓词列表的一部分。请参阅https://github.com/pylons/pyramid/issues/1391,获取一份声明not_失败了accept. 与@mcdonc的讨论得出结论,不应将其作为谓词进行记录。请参阅https://github.com/pylons/pyramid/pull/1487了解此公关删除了快速教程ini文件中的日志配置,除了脚手架和日志相关章节,以避免过早解释。
澄清之前暗示的
ISession.invalidateAPI文档。改进和澄清关于Pyramid定义为
principal和Auserid在它的安全API中。参见https://github.com/pylons/pyramid/pull/1399添加命令行程序的文档 (
p*脚本)。参见https://github.com/pylons/pyramid/pull/2191
脚手架¶
更新脚手架生成机械,以返回Pyramid和Pyramid文档的版本,以便在脚手架中使用。更新了starter、alchemy和zodb模板,以链接到正确版本的文档,并反映用于生成脚手架的Pyramid。
从模板中删除了非ASCII版权符号,因为这导致脚手架无法生成项目。
现在您可以通过
tox py2-scaffolds和tox py3-scaffolds.
1.5(2014年4月8日)¶
python 3.4兼容性。
避免碰撞
pserve --reload在py3k下,当迭代可能发生变异时sys.modules.UnencryptedCookieSessionFactoryConfig如果机密包含高阶字符,则失败。参见https://github.com/pylons/pyramid/issues/1246修正了一个错误
UnencryptedCookieSessionFactoryConfig和SignedCookieSessionFactory在哪里?timeout=None将导致始终创建新会话。也在SignedCookieSessionFactory一reissue_time=None在修改会话时会导致异常。参见https://github.com/pylons/pyramid/issues/1247更新了文档和脚手架,以与新的2.0版本保持一致
Lingua. 这包括删除所有setup.cfg来自脚手架和文档环境的文件。
1.5b1(2014年2月8日)¶
特征¶
我们不再急于澄清
request.exception和request.exc_info在特温的例外观点中。这使得可以在完成的回调中检查异常信息。请参阅https://github.com/pylons/pyramid/issues/1223。
1.5A4(2014-01-28)¶
特征¶
更新新主题的脚手架,固定文件和样品项目。
漏洞修补¶
依赖于WebOB的新版本,这样我们就可以修复一些关键的bug,这些bug是Pyramid中功能的ShowStopper。
向JSONP响应添加尾随分号。这修复了旧IE版本的javascript语法错误。参见https://github.com/pylons/pyramid/pull/1205
当配置程序
set_request_property方法被使用或当配置器的add_request_method方法与property=True属性。请参阅https://github.com/pylons/pyramid/issues/1212。
1.5A3(2013年12月10日)¶
特征¶
已添加授权API作为请求的方法:
request.has_permission.request.has_permission是基于方法的替代方法pyramid.security.has_permissionAPI和工作原理完全相同。旧的API现在已被弃用。属性API属性已添加到请求中,以便更轻松地访问身份验证数据:
request.authenticated_userid,request.unauthenticated_userid和request.effective_principals.它们分别是
pyramid.security.authenticated_userid,pyramid.security.unauthenticated_userid和pyramid.security.effective_principals. 它们的操作完全相同,只是它们是请求的属性,而不是接受请求的函数。它们是属性,因此无法分配给它们。旧的基于函数的API现在已被弃用。Pyramid的控制台脚本 (
pserve,pviews等等)现在可以直接运行,允许在运行时将自定义参数发送到Python解释器。例如::python -3 -m pyramid.scripts.pserve development.ini
添加了一个特定的子类
HTTPBadRequest已命名pyramid.exceptions.BadCSRFToken现在将针对以下故障提出check_csrf_token. 参见https://github.com/pylons/pyramid/pull/1149增加了一个新的
SignedCookieSessionFactory这和UnencryptedCookieSessionFactoryConfig但更明确的重点是签署内容。此函数的自定义序列化程序参数应该只关注序列化,而不像其前置任务要求序列化程序也执行签名。请参阅https://github.com/pylons/pyramid/pull/1142。请注意,使用SignedCookieSessionFactory与使用生成的cookie不兼容UnencryptedCookieSessionFactory,因此,如果切换到现有用户会话数据,它将被销毁。增加了一个新的
BaseCookieSessionFactory它充当一个通用的cookie工厂,框架实现者可以使用它来创建自己的会话实现。它提供了一个可重用的API,它strict关注于提供一个类似字典的对象,该对象正确地处理更新、超时和与ISession应用程序编程接口。参见https://github.com/pylons/pyramid/pull/1142锚定参数
pyramid.request.Request.route_url和pyramid.request.Request.resource_url它们的衍生产品现在将通过URL引用进行转义,以确保最小的一致性。参见https://github.com/pylons/pyramid/pull/1183允许发送
_query和_anchor选项到pyramid.request.Request.static_url生成外部URL时。参见https://github.com/pylons/pyramid/pull/1183现在可以将字符串作为
_query参数pyramid.request.Request.route_url和pyramid.request.Request.resource_url以及它们的衍生物。当发送字符串而不是列表或字典时。它是URL引用,但不需要在k=v形式。如果您希望使用不同于x-www-form-urlencoded. 参见https://github.com/pylons/pyramid/pull/1183pyramid.testing.DummyRequest现在有一个domain属性以匹配新的WebOB 1.3 API。它的价值在于example.com.
漏洞修补¶
修复
pcreate编写脚本,以便当目标目录名以斜杠结尾时,不会生成非工作的项目目录结构。之前说过pcreate -s starter /foo/bar/产生不同于说的输出pcreate -s starter /foo/bar. 前者工作不正常。修复
principals_allowed_by_permission方法ACLAuthorizationPolicy所以它可以预测__acl__资源论。以前它没有尝试调用__acl__如果它是可调用的。这个
pviews当URL需要自定义请求方法以执行遍历时,脚本不起作用。通过添加自定义方法和描述符pyramid.config.Configurator.add_request_method现在将出现,允许遍历继续。参见https://github.com/pylons/pyramid/issues/1104移除未使用的
renderer论证从Configurator.add_route.允许
BasicAuthenticationPolicy使用非ASCII用户名和密码。字符集不是作为头的一部分传递的,不同的浏览器在UTF-8和Latin-1之间交替使用,因此策略现在尝试先用UTF-8解码,并将回退到Latin-1。看到了吗https://github.com/Pylons/pyramid/pull/1170这个
@view_defaults现在应用于未找到和禁止的视图,这些视图被定义为修饰类的方法。参见https://github.com/pylons/pyramid/issues/1173
文档¶
添加了一个“快速教程”以配合快速教程
删除提及
pyramid_beaker从文档。烧杯不再维护。指着人们pyramid_redis_sessions相反。为添加文档
pyramid.interfaces.IRendererFactory和pyramid.interfaces.IRenderer.
向后不兼容¶
中的键/值
_query参数request.route_url以及query参数request.resource_url(及其变体),用于编码None作为字符串'None',将结果查询字符串保留为a=b&key=None. 在这种情况下,该值现在被删除,留下一个查询字符串a=b&key=. 参见https://github.com/pylons/pyramid/issues/1119
废弃¶
贬低
pyramid.interfaces.ITemplateRenderer接口。当mako和chameleon模板绑定被拆分为自己的包时,它被定义得不正确,并且不再使用。这个
pyramid.session.UnencryptedCookieSessionFactoryConfigAPI已被弃用,并由pyramid.session.SignedCookieSessionFactory. 注意,当cookies由UnencryptedCookieSessionFactoryConfig与旧版本生成的cookie兼容,由签名的CokieSessionFactory生成的cookie不兼容。参见https://github.com/pylons/pyramid/pull/1142这个
pyramid.security.has_permissionAPI现已弃用。相反,使用新添加的has_permission请求对象的方法。这个
pyramid.security.effective_principalsAPI现已弃用。而是使用新添加的effective_principals请求对象的属性。这个
pyramid.security.authenticated_useridAPI现已弃用。而是使用新添加的authenticated_userid请求对象的属性。这个
pyramid.security.unauthenticated_useridAPI现已弃用。而是使用新添加的unauthenticated_userid请求对象的属性。
依赖关系¶
Pyramid现在依赖于webob>=1.3(它使用
webob.cookies.CookieProfile从1.3±)。
1.5A2(2013年9月22日)¶
特征¶
用户现在可以将点式python名称提供给
factory参数配置器方法名为add_{{view,route,subscriber}}_predicate(您可以传递引用工厂的点名称,而不是直接传递谓词工厂)。
漏洞修补¶
在中修复异常
pyramid.path.package_name解析没有的命名空间包的包名称时__file__属性。
向后不兼容¶
Pyramid不再依赖或配置默认的Mako和变色龙模板系统渲染器。默认情况下不包括这些模板系统意味着Pyramid核心的依赖性更少,可以在未来的平台上运行,而无需立即关注其模板附加组件的兼容性。它还使维护稍微更有效,因为不同的人可以维护他们理解和关心的模板系统附加组件,而不需要提交访问Pyramid核心,它允许用户不想看到他们不使用的任何软件包,当他们安装Pyramid时随车而来。
这意味着在升级到Pyramid1.5a2+时,使用这些模板系统的项目在其应用程序尝试呈现变色龙或Mako模板时将看到一个类似这样结束的回溯:
ValueError: No such renderer factory .pt
或:
ValueError: No such renderer factory .mako
或:
ValueError: No such renderer factory .mak
对Mako模板的支持已转移到名为
pyramid_mako和对变色龙模板的支持已转移到名为pyramid_chameleon. 这些包是对这些模板语言的旧内置支持的嵌入式替换。您所要做的就是安装它们并使它们在您的配置中处于活动状态,以便为注册渲染器工厂.pt和/或.mako(或).mak)使您的应用程序再次工作。要在现有项目中重新添加对变色龙和/或Mako模板渲染器的支持,请执行以下步骤。
如果您依赖Mako模板:
确定
pyramid_mako包已安装。一种方法是添加pyramid_mako到install_requires包的一部分setup.py文件,然后重新运行setup.py develop::setup( #... install_requires=[ 'pyramid_mako', # new dependency 'pyramid', #... ], )
在应用程序的实例化Pyramid部分中
pyramid.config.Configurator(经常)main()在项目中的函数__init__.py文件),告诉Pyramid包含pyramid_mako包括:config = Configurator(.....) config.include('pyramid_mako')
如果您依赖变色龙模板:
确定
pyramid_chameleon包已安装。一种方法是添加pyramid_chameleon到install_requires包的一部分setup.py文件,然后重新运行setup.py develop::setup( #... install_requires=[ 'pyramid_chameleon', # new dependency 'pyramid', #... ], )
在应用程序的实例化Pyramid部分中
~pyramid.config.Configurator(经常)main()在项目中的函数__init__.py文件),告诉Pyramid包含pyramid_chameleon包括:config = Configurator(.....) config.include('pyramid_chameleon')
请注意,将这些包安装到 老年人 用于前向兼容的Pyramid。即使您不立即升级到Pyramid1.5,在Pyramid1.4安装中执行上述步骤也非常好,不会造成任何差异,并且在您最终升级到Pyramid1.5时,将提供向前兼容性。
随着Mako和变色龙支架从核心移除,一些单元测试使用
pyramid.renderers.render*方法可能开始失败。如果您的任何单元测试正在调用pyramid.renderers.render()或pyramid.renderers.render_to_response()使用Mako或变色龙模板,然后pyramid.config.Configurator在单元测试期间生效的实例也应该更新为包括插件,如上图所示。例如::class ATest(unittest.TestCase): def setUp(self): self.config = pyramid.testing.setUp() self.config.include('pyramid_mako') def test_it(self): result = pyramid.renderers.render('mypkg:templates/home.mako', {})
或:
class ATest(unittest.TestCase): def setUp(self): self.config = pyramid.testing.setUp() self.config.include('pyramid_chameleon') def test_it(self): result = pyramid.renderers.render('mypkg:templates/home.pt', {})
如果使用Pyramid调试工具栏,当您将Pyramid升级到1.5a2+时,还需要升级
pyramid_debugtoolbar由于旧的工具栏版本与Pyramid1.5A2+不兼容,因此至少打包到1.0.8版,因为从核心移除了Mako支持。也可以使用这个较新版本的工具栏代码和较旧的Pyramid。移除
request.response_*不同的属性。自Pyramid1.1以来,这些属性已被弃用,根据弃用策略,这些属性现在已被删除。request.response当使用pyramid.renderers.render()应用程序编程接口。几乎所有渲染器都会改变request.response响应对象(例如,JSON渲染器集request.response.content_type到application/json,但只有当渲染器生成响应时才需要这样做;当作为调用的副作用执行时,这是一个错误。pyramid.renderers.render().移除
bfg2pyramid固定程序脚本。这个
pyramid.events.NewResponse事件现在已发送 之后 执行响应回调。它以前在执行响应回调之前执行过。理由:能够在响应回调完成任务后而不是以前检查响应,这更有用。已删除名为的类
pyramid.view.static从Pyramid1.1开始就被弃用了。代替使用pyramid.static.static_view具有use_subpath=True参数。移除
pyramid.view.is_response自Pyramid1.1以来已弃用的函数。使用pyramid.request.Request.is_response方法。删除了将以下参数传递给
pyramid.config.Configurator.add_route:view,view_context.view_for,view_permission,view_renderer和view_attr. 自Pyramid1.1以来,使用这些参数已被弃用。而不是将与视图相关的参数传递给add_route,使用单独的呼叫pyramid.config.Configurator.add_view将视图与使用其route_name参数。注意,这会影响pyramid.config.Configurator.add_static_view因为它委托给add_route.删除了影响和查询
pyramid.request.Request对象,就像它是字典一样。以前有可能使用__getitem__,get,items以及其他类似dict的方法来访问wsgi环境中的值。自Pyramid1.1以来,这种行为已被弃用。使用方法request.environ(一本真正的字典)相反。删除了古老的向后兼容黑客入侵
pyramid.traversal.DefaultRootFactory它填充了__dict__与bfg 0.9兼容的matchdict值的工厂。这个
renderer_globals_factory论据pyramid.config.Configurator` constructor and its `` 安装程序“注册表”方法已被删除。这个 ``set_renderer_globals_factory方法pyramid.config.Configurator也被移除。(内部)pyramid.interfaces.IRendererGlobals接口也被删除。自1.1以来,这些参数、方法和接口已被弃用。使用ABeforeRender事件订阅服务器如Pyramid叙述文档的“Hook”一章所述,而不是向配置程序提供渲染器全局值。
废弃¶
这个
pyramid.config.Configurator.set_request_property方法现在在使用时发出一个弃用警告。在1.4中,文档已被弃用,但在使用时未发出弃用警告。
1.5A1(2013年8月30日)¶
特征¶
名为的新HTTP异常子类
pyramid.httpexceptions.HTTPSuccessful加入。你可以用这个类作为context捕获所有200系列“异常”的异常视图(例如“raise httpok”)。这也能让你抓到 only 这个HTTPOk异常本身;以前这是不可能的,因为许多其他异常(例如HTTPNoContent)继承自HTTPOk但是现在没有了。现在,通过使用新的
route_name,route_kw和route_remainder_name论据request.resource_url和request.resource_path. 请参阅标题为“混合URL生成”的“组合遍历和URL调度”文档章节的新部分。现在可以从Pyramid脚手架中的双支撑(未搭建,这些表示替换值)。你可以使用
\{{\{{a\}}\}}代表“裸”{{{{a}}}}. 见https://github.com/pylons/pyramid/pull/862添加
localizer和locale_name属性(已具体化)到请求。请参阅https://github.com/pylons/pyramid/issues/508。请注意pyramid.i18n.get_localizer和pyramid.i18n.get_locale_name函数现在只需根据请求查找这些属性。添加
pdistreport脚本,它打印正在使用的python版本、正在使用的pythonPyramid版本以及当前安装的所有python发行版的版本号和位置。添加使用
not_类。例如::from pyramid.config import not_ @view_config(route_name='myroute', request_method=not_('POST')) def myview(request): ...
上面的示例将确保在请求方法未发布时调用视图(至少在没有其他视图更具体的情况下)。
这个
pyramid.config.not_类可用于任何值,该值是在这些上下文中传递的谓词值:pyramid.config.Configurator.add_viewpyramid.config.Configurator.add_routepyramid.config.Configurator.add_subscriberpyramid.view.view_configpyramid.events.subscriber
scripts/prequest.py:添加提交支持PUT和PATCH请求。参见https://github.com/pylons/pyramid/pull/1033。添加提交支持OPTIONS和PROPFIND请求,并允许用户通过--login脚本的参数。参见https://github.com/pylons/pyramid/pull/1039。ACLAuthorizationPolicy支架__acl__作为可赎回的这消除了潜在的AttributeError那将在context当属性未定义时,AttributeError可以从动态属性中的任何用户定义的代码中引发。建议将动态ACL定义为可调用的,以避免这种歧义。请参阅https://github.com/pylons/pyramid/issues/735。允许协议相关的URL(例如
//example.com/images)传递给pyramid.config.Configurator.add_static_view. 这允许基于当前协议生成外部托管的静态URL。这个
AuthTktAuthenticationPolicy有两个新选项可配置其域使用:parent_domain:如果设置,则在父域上设置身份验证cookie。如果您有多个站点共享同一个域,这很有用。domain:如果提供,则始终为此域设置cookie,跳过所有常规逻辑。
请参阅https://github.com/pylons/pyramid/pull/1028、https://github.com/pylons/pyramid/pull/1072和https://github.com/pylons/pyramid/pull/1078。
这个
AuthTktAuthenticationPolicy现在使用时支持IPv6地址include_ip=True选择权。这可能与备选方案不兼容auth_tkt实现,因为规范没有定义如何正确处理IPv6。请参阅https://github.com/pylons/pyramid/issues/831。使通过使用变量参数成为可能
pyramid.paster.get_appsettings. 这也允许生成initialize_db脚本alchemy为表单中的选项提供支持的脚手架a=1 b=2因此,可以在参数化的.ini文件,例如initialize_myapp_db etc/development.ini a=1 b=2. 参见https://github.com/pylons/pyramid/pull/911这个
request.session.check_csrf_token()方法与check_csrf视图谓词现在考虑名为X-CSRF-Token以及csrf_token表单参数,他们一直这样做)。当表单参数不存在时,将尝试使用头。视图查找现在将根据上下文的继承层次结构搜索有效的视图。它首先尝试根据最具体的上下文查找视图,如果谓词失败,它将向上移动继承链,以测试由上下文的超级类型找到的视图。在过去,只检查包含视图的最特定类型,如果找不到匹配的视图,则会引发谓词不匹配。现在谓词不匹配不会隐藏在超级类型上注册的有效视图。下面是一个现在有效的例子:
class IResource(Interface): ... @view_config(context=IResource) def get(context, request): ... @view_config(context=IResource, request_method='POST') def post(context, request): ... @view_config(context=IResource, request_method='DELETE') def delete(context, request): ... @implementer(IResource) class MyResource: ... @view_config(context=MyResource, request_method='POST') def override_post(context, request): ...
以前,重写后视图注册会隐藏myresource上下文中的get和delete视图,这会导致在尝试使用get或delete方法时出现谓词不匹配错误。现在找到了视图,没有出现谓词不匹配的情况。参见https://github.com/pylons/pyramid/pull/786和https://github.com/pylons/pyramid/pull/1004和https://github.com/pylons/pyramid/pull/1046
这个
pserve命令现在接受-v(或)--verbose标志和A-q(或)--quiet旗。运行输出pserve可以使用这些标志进行控制。-v可以多次指定以增加冗长性。-q将详细程度设置为0无条件地。默认详细级别为1.这个
alchemy脚手架测试现在提供了更好的覆盖范围。参见https://github.com/pylons/pyramid/pull/1029这个
pyramid.config.Configurator.add_route方法现在支持使用外部URL作为模式进行调用。有关更多信息,请参阅https://github.com/pylons/pyramid/issues/611和“url调度”一章中的文档部分。
漏洞修补¶
不可能使用
pyramid.httpexceptions.HTTPException作为context当您希望异常视图重写默认的异常视图时,将异常视图作为与HTTP相关的异常的非常通用的catchall。参见https://github.com/pylons/pyramid/issues/985当
pyramid.reload_templates设置为true,并重新加载变色龙模板,渲染器规范命名了一个宏(例如foo#macroname.pt)重新加载模板后,由于文件更改,模板的呈现将生成整个模板体,而不仅仅是宏的呈现。请参阅https://github.com/pylons/pyramid/issues/1013。在将虚拟根与路由与
*traverse以它的模式。现在,在这种配置中生成的遍历路径是正确的,而不是缺少前导斜杠的元素。修复了在某些情况下返回具有先前defname值的元组的Mako渲染器错误。更多信息请参见https://github.com/pylons/pyramid/issues/1037。
使
pyramid.config.assets.PackageOverrides对象实现的API__loader__PEP 302中指定的对象。代理__loader__由进口商设定,如有;否则加薪NotImplementedError. 这使得pyramid静态视图覆盖在python 3.3下正常工作(以前不会)。更多信息请参见https://github.com/pylons/pyramid/pull/1015。mako_templating:为非重要的mako由于上游markupsafe删除python 3.2支持。Mako模板将不再在MarkupSafe 0.17和Python 3.2的组合下工作(尽管MarkupSafe 0.17和Python 3.3或任何受支持的Python 2版本的组合都可以工作)。空间和点现在可能在Mako渲染器模板路径中。当在1.4a1中添加对新makodef语法的支持时,这一点就被打破了。参见https://github.com/pylons/pyramid/issues/950
pyramid.debug_authorization=true现在将正确打印出来Allowed对于在中注册的视图NO_PERMISSION_REQUIRED而不是调用permits授权策略的方法。参见https://github.com/pylons/pyramid/issues/954Pyramid无法安装在某些系统上,因为它与一些测试文件打包在一起,这些文件的名称中包含高阶字符。这些文件现在已被删除。参见https://github.com/pylons/pyramid/issues/981
pyramid.testing.DummyResource没有定义__bool__,所以python 3下的代码将使用__len__为了寻找真理,这通常导致一个傻瓜资源的例子是“不可靠”而不是“真实”。参见https://github.com/pylons/pyramid/pull/1032这个
alchemy当数据库是mysql时,scaffold会在创建表时中断。参见https://github.com/pylons/pyramid/pull/1049这个
current_route_url方法现在默认将查询字符串附加到URL。参见https://github.com/pylons/pyramid/issues/1040制作
pserve.cherrypy_server_runner兼容python 3。参见https://github.com/pylons/pyramid/issues/718
向后不兼容¶
修改了
current_route_url方法在pyramid.request中。默认情况下,该方法以前返回的URL没有查询字符串,现在它将附加查询字符串,除非它被重写。这个
route_urlandroute_pathAPIs no longer quote/to `` %2f``当替换值包含/. 这是毫无意义的,因为wsgi服务器总是取消斜杠的引号,而且Pyramid从来没有看到引号。无法再设置
locale_name请求的属性,也不可能设置localizer请求的属性。这些属性现在是“真实化的”属性,分别使用文档“国际化”一章中描述的机制查找区域设置名称和区域设置器。如果你发送一个
X-Vhm-Root标题的值以斜杠(或任意数量的斜杠)结尾,使用时在生成URL之前,将删除尾随斜杠request.resource_url或request.resource_path. 以前,虚拟根路径不会去除尾随斜杠,这将影响URL生成。这个
pyramid.interfaces.IResourceURL现在,Interface增加了两个新属性:virtual_path_tuple和physical_path_tuple. 这些应该是资源路径的元组形式(物理和虚拟)。
1.4(2012年12月18日)¶
文档¶
修复zodb教程中的功能测试
1.4B3(2012年12月10日)¶
仅打包发布,无代码更改。由于tarball中的目录丢失,1.4b2是brownbag版本。
1.4b2(2012年12月10日)¶
文档¶
脚手架现在符合PEP-8标准(至少在短暂的闪光时刻)。
教程改进。
向后不兼容¶
修改了
_depth参数pyramid.view.view_config接受相对于调用view_config本身。因此,当它之前期望值为1或者更大,以反映view_config1个堆栈帧是否远离venusian.attach,此实现细节现在隐藏。修改了
_backframes参数pyramid.util.action_method以与描述的更改类似的方式_depth上面。这个论点仍然没有正式记录,但可能被一些精神错乱的人在野外使用。
1.4b1(2012-11-21)¶
特征¶
小孢子增强,它预期
pyramid.response.Response对象可能从视图返回。如果视图返回的对象的类是此类,则某些代码是快捷方式。类似的微优化被用于pyramid.request.Request.is_response.使在上使用变量参数成为可能
p*命令 (pserve,pshell,pviews等)在表格中a=1 b=2所以您可以在参数化中填充值.ini文件,例如pshell etc/development.ini http_port=8080. 参见https://github.com/pylons/pyramid/pull/714Pyramid事件处理程序的一个比较高级和模糊的特性是它们处理“多接口”通知的能力。传统上,这些通知向订阅服务器可调用提供了多个对象。例如,如果事件是通过如下代码发送的:
registry.notify(event, context)
在过去,为了捕获这样的事件,您必须编写并注册一个事件订阅服务器,该订阅服务器在其参数列表中同时提到了事件和上下文:
@subscriber([SomeEvent, SomeContextType]) def asubscriber(event, context): pass
在许多以这种方式注册的订阅服务器可调用文件中,订阅服务器可调用文件中的逻辑通常完全忽略第二个和后续参数(例如
context在上面的例子中可以忽略),因为它们通常作为事件的属性存在。你通常可以通过做得到相同的价值event.context或者类似的。在我们添加“订户谓词”之前,您需要在订户可调用体中添加一个通常被忽略的额外参数,这只是一个小麻烦,用于在1.4 alpha之前的版本中缩小订户将被执行的环境集。一旦添加了这些参数,麻烦就会升级,因为订阅服务器谓词需要接受与配置它们所针对的订阅服务器可调用文件相同的参数列表和arity。例如,如果您的代码中有这两个订户注册:
@subscriber([SomeEvent, SomeContextType]) def asubscriber(event, context): pass @subscriber(SomeOtherEvent) def asubscriber(event): pass
您希望使用订阅服务器谓词:
@subscriber([SomeEvent, SomeContextType], mypredicate=True) def asubscriber1(event, context): pass @subscriber(SomeOtherEvent, mypredicate=True) def asubscriber2(event): pass
如果存在
mypredicate订户谓词的编写方式使得它只接受__call__无法对订阅使用它,该订阅在其订阅服务器接口列表中命名了多个接口。同样,如果编写了一个接受两个参数的订户谓词,则不能对仅命名单个接口类型的注册使用它。例如,如果创建此谓词:
class MyPredicate(object): # portions elided... def __call__(self, event): return self.val == event.context.foo
它不适用于多接口注册的订阅,因此在上面的示例中,当您尝试对
asubscriber1,它将在运行时失败,并出现类型错误,声称某个对象试图用太多参数调用它。为了绕过这个限制,您必须设计
mypredicate谓词期望在其__call__要么一个event参数(SomeOtherEvent对象) or 一对参数(someEvent对象和someContextType对象),可能是通过这样做:class MyPredicate(object): # portions elided... def __call__(self, event, context=None): return self.val == event.context.foo
这是令人困惑和糟糕的。
为了允许人们忽略订阅者可调用文件的未使用参数,并规范事件订阅者和订阅者谓词之间的关系,我们现在允许订阅者和订阅者谓词只接受一个
event参数,即使它们已经订阅了涉及多个接口的通知。只接受一个参数的订阅服务器和订阅服务器谓词将接收传递给notify;这通常是(但不总是)事件对象。订阅查找中涉及的其他对象将被丢弃。现在可以编写只接受event即使它订阅了多个接口:@subscriber([SomeEvent, SomeContextType]) def asubscriber(event): # this will work!
这将防止您不必要地将订阅服务器可调用参数与订阅类型匹配,特别是在不使用订阅服务器中的任何参数(事件对象本身除外)的情况下。
但是请注意,如果事件对象不是调用中的第一个对象
notify你会遇到麻烦的。例如,如果首先使用上下文参数调用notify::registry.notify(context, event)
您将无法利用事件专用功能。它将“工作”,但事件处理程序接收的对象将不是事件对象,而是上下文对象,这不会非常有用:
@subscriber([SomeContextType, SomeEvent]) def asubscriber(event): # bzzt! you'll be getting the context here as ``event``, and it'll # be useless
现有的多参数订阅服务器继续工作而没有问题,因此如果系统通知使用多个接口,而第一个接口不是事件接口,则应继续使用这些订阅服务器。例如::
@subscriber([SomeContextType, SomeEvent]) def asubscriber(context, event): # this will still work!
仅事件功能允许使用订阅服务器谓词,该谓词只接受多个接口订阅服务器注册和单个接口订阅服务器注册中的请求参数。您不需要根据订阅类型参数对谓词进行稍微不同的更改。相反,只需编写所有订户谓词,以便它们只接受
event在他们__call__对于使用事件作为第一个参数的订阅,即使那些接受不仅仅是event.但是,同样的警告也适用于谓词和订阅服务器可调用文件:如果订阅的是多接口事件,而第一个接口不是事件接口,则谓词将无法正常工作。在这种情况下,需要匹配谓词
__call__参数排序和组合到接口的排序。例如,如果订阅的注册使用[SomeContext, SomeEvent],您需要在谓词参数的顺序中反映这一点。__call__方法:def __call__(self, context, event): return event.request.path.startswith(self.val)
tl;dr:1)当使用多接口订阅时,始终使用事件类型作为第一个订阅注册参数;2)当1为真时,仅使用
event在订阅服务器和订阅服务器谓词参数列表中,无论通知订阅服务器的接口有多少。这种组合将导致订阅服务器谓词的最大可重用性和最少的思想量。负责任地喝酒。
漏洞修补¶
尝试定位属性时失败
__text__当debug_routematch设置为真或pviews使用了命令。参见https://github.com/pylons/pyramid/pull/727
文档¶
将教程源文件与每个使用的脚手架呈现的文件同步。
1.4A4(2012年11月14日)¶
特征¶
pyramid.authentication.AuthTktAuthenticationPolicy已更新以支持更新的哈希算法,如sha512. 如果可能的话,现有的应用程序应该考虑更新以提高默认MD5散列的安全性。增加了一个
effective_principals路由和视图谓词。不允许从
authenticated_userid或者是由返回的主体列表之一的用户IDeffective_principals作为字符串之一system.Everyone或system.Authenticated当任何内置授权策略pyramid.authentication正在使用中。这两个字符串是为Pyramid内部使用而保留的,它们不会被接受为有效的用户ID。稍微好一点的调试日志记录来自
pyramid.authentication.RepozeWho1AuthenticationPolicy.pyramid.security.view_execution_permitted用于返回True如果找不到视图。现在提出了TypeError在这种情况下,异常是不合理的,因为断言不存在的视图是允许执行的。请参阅https://github.com/pylons/pyramid/issues/299。允许一个
_depth参数pyramid.view.view_config这将允许其他软件对decorator进行有限的组合重用,这些软件希望提供与view_config非常类似的自定义decorator。允许将一个不可访问的修饰符传递给
pyramid.config.Configurator.add_view. 这允许视图由多个装饰器包装,而不需要自己组合装饰器。
漏洞修补¶
如果渲染器返回
None,结果响应的主体将显式设置为空字符串。相反,现在,主体保持不变,这允许渲染器通过使用例如request.response.body = b'foo'. 渲染器设置的主体将在退出时被移除。参见https://github.com/pylons/pyramid/issues/709在不常见的情况下,
pyramid_excview_tween_factory可能无意中引发了KeyError寻找request_iface作为请求的属性。在这种情况下,它不再失败。参见https://github.com/pylons/pyramid/issues/700在
match_param和physical_path谓词实现;返回false而不是引发异常。pyramid.view.render_view由于字节/Unicode不一致,在python 3.x下无法正常运行。参见https://github.com/pylons/pyramid/issues/721
废弃¶
pyramid.authentication.AuthTktAuthenticationPolicy如果应用程序正在使用策略而没有显式传递hashalg参数。这是因为默认值是“md5”,理论上认为它会受到碰撞攻击。如果您真的想要“md5”,那么必须显式地指定它以消除警告。
文档¶
所有使用的教程
pyramid.authentication.AuthTktAuthenticationPolicy现在显式通过sha512作为一个hashalg参数。
内构件¶
移动
TopologicalSorter从pyramid.config.util到pyramid.util移动CyclicDependencyError从pyramid.config.util到pyramid.exceptions重命名Singleton到Sentinel并从pyramid.config.util到pyramid.util;这是为了将某天可能是API的东西移出pyramid.config.util,因为该包不应该从非Pyramid代码导入。TopologySorter仍然不是API,但可能会成为API。摆脱阴暗的蒙凯修补
pyramid.request.Request和pyramid.response.Response内完成__init__.pyPyramid。WebOB不再依赖于这一点。相反,Pyramid请求类的responseClass属性被分配给Pyramid响应类;这足以满足WebOB的要求,并像以前那样使用monkeypatching。
1.4A3(2012年10月26日)¶
漏洞修补¶
匹配参数谓词的文本方法被修复以对其值进行排序。https://github.com/pylons/pyramid/pull/705的一部分
1.4a
pyramid.scripting.prepare与同名的1.3系列函数的行为不同。特别是,如果传递了一个请求,它将不会设置registry请求的属性,如1.3。症状是将请求传递给pyramid.paster.bootstrap(使用函数)没有registry属性可以假定注册表将通过Pyramid附加到请求。这一假设可以在1.3中作出,但不能在1.4中作出。现在也可以在1.4中进行假设(注册表附加到传递给引导或准备的请求)。当注册一个名为变色龙ZPT渲染器的视图配置时,其中包含一个宏名(例如
renderer='some/template#somemacro.pt)以及一个视图配置,其中没有指向同一模板的宏名(例如renderer='some/template.pt',内部缓存可能会混淆这两者,您的代码可能呈现了一个而不是另一个。
特征¶
允许将多个值指定给
request_param将谓词作为序列查看/路由。以前只允许使用单个字符串值。参见https://github.com/pylons/pyramid/pull/705关于脚手架文件章节的注释
.ini文件夹。在处添加了HTTP基本身份验证策略
pyramid.authentication.BasicAuthAuthenticationPolicy.配置器
testing_securitypolicy方法现在返回它创建的策略对象。配置器
testing_securitypolicy方法接受两个新参数:remember_result和forget_result. 如果提供,这些值将影响政策的结果remember和forget方法。由创建的DummySecurityPolicy
testing_securitypolicy现在设置forgotten政策价值(价值True当其forget方法被调用。由创建的DummySecurityPolicy
testing_securitypolicy现在设置remembered策略值,即principal当它的remember方法被调用。新的
physical_path视图谓词。如果指定,该值应该是一个字符串或元组,表示通过遍历找到的上下文的物理遍历路径,以便将该谓词匹配为true。例如:physical_path='/'或physical_path='/a/b/c'或physical_path=('', 'a', 'b', 'c'). 这不是路径前缀匹配或regex,而是整个路径匹配。当某个对象被遍历到某个视图时,如果您希望始终潜在地显示该视图,这很有用,但是您不能确定它将是哪种类型的对象,因此不能使用context谓语。斜杠字符之间或元组元素中的单个path元素应为资源名称的Unicode表示形式,不应以任何方式进行编码。
1.4A2(2012年9月27日)¶
漏洞修补¶
当试图在资产规范中确定mako defname和chameleon宏名称时,考虑到文件名中可能有连字符。参见https://github.com/pylons/pyramid/pull/692
特征¶
一个新的
pyramid.session.check_csrf_token增加了方便功能。A
check_csrf添加了视图谓词。例如,现在可以config.add_view(someview, check_csrf=True). 当谓词被选中时,如果csrf_token价值在request.params与请求会话中的CSRF令牌匹配,将允许执行该视图。否则,将不允许执行。添加
Base.metadata.bind = engine到炼金术模板,以便强制定义的表可以工作。
文档¶
使用插入后所需的更改更新wiki2 sqla教程
Base.metadata.bind = engine进入炼金术的脚手架。
1.4A1(2012年9月16日)¶
漏洞修补¶
来自1.3分支的转发端口:未配置身份验证策略时,调用
pyramid.security.effective_principals将无条件返回空列表。这是不正确的,应该无条件返回[Everyone]现在开始了。显式URL调度正则表达式现在可以包含冒号。https://github.com/pylons/pyramid/issues/629
在Python3.2下的至少一个64位Ubuntu系统上,使用
view_config装饰师造成了RuntimeError: dictionary changed size during iteration例外。它不再是了。更多信息请参见https://github.com/pylons/pyramid/issues/635。在makotemplates lookup中,检查uri是否已经调整,并将其恢复为资产规范。通常情况下,继承的模板或包含的组件都会发生这种情况。https://github.com/Pylons/pyramid/issues/606https://github.com/Pylons/pyramid/pull/607
在Mako模板查找中,在将继承与资产规范混合时检查绝对URI(使用Mako目录)。网址:https://github.com/pylons/pyramid/issues/662
HTTP接受头未规范化,导致潜在的冲突视图注册未被注意。只有两个视图的大小写不同(“text/html”与“text/html”),现在将引发错误。https://github.com/pylons/pyramid/pull/620
来自1.3分支的转发端口:向
accept谓词在Python3下运行的金字塔应用程序中,您可能收到TypeError: unorderable types: function() < function()例外。
特征¶
python 3.3兼容性。
configurator.add_指令现在接受任意可调用文件,如部分或对象实现
__call__哪些没有__name__和__doc__属性。请参阅https://github.com/pylons/pyramid/issues/621和https://github.com/pylons/pyramid/pull/647。现在可以添加第三方自定义视图、路由和订阅服务器谓词,供视图作者通过
pyramid.config.Configurator.add_view_predicate,pyramid.config.Configurator.add_route_predicate和pyramid.config.Configurator.add_subscriber_predicate. 例如,这样做:config.add_view_predicate('abc', my.package.ABCPredicate)
可能允许视图作者在配置该谓词的应用程序中执行此操作:
@view_config(abc=1)
类似的特征存在于
add_route和add_subscriber. 有关详细信息,请参阅挂钩一章中的“添加自定义视图、路由或订阅服务器谓词”。请注意,为支持上述功能所做的更改现在意味着只有使用相同“顺序”注册的操作才能相互冲突。以前是这样的,在不同的命令下注册的行为可能会发生冲突,但据我所知,从来没有任何事情依赖于这种行为(这有点愚蠢)。
自定义对象可以通过定义一个
__json__对象类的方法。此方法应返回本机可序列化的值json.dumps(例如整数、列表、字典、字符串等)。JSON呈现器现在允许自定义类型适配器的定义将未知对象转换为JSON序列化。
从本版本开始,
request_method谓词在使用时也意味着HEAD使用时暗示GET. 例如,使用@view_config(request_method='GET')相当于使用@view_config(request_method=('GET', 'HEAD')). 使用@view_config(request_method=('GET', 'POST')相当于使用@view_config(request_method=('GET', 'HEAD', 'POST'). 这是因为head是get的一个变体,它省略了body,而webob在使用head时具有返回空body的特殊支持。config.add_request_method已引入以支持使用任意可调用文件扩展请求对象。此方法扩展到上一个config.set_request_property通过支持方法和属性。此方法现在导致在请求构造时执行的代码少于config.set_request_property在版本1.3中。不要添加
?到由生成的URLrequest.resource_url如果query提供了参数,但为空。不要添加
?到由生成的URLrequest.route_url如果_query提供了参数,但为空。静态视图机械现在上升(而不是返回)
HTTPNotFound和HTTPMovedPermanently异常,这样就可以被未找到的视图(和其他异常视图)捕获。Mako渲染器现在支持资产规格中的定义名称。当定义名称存在于资产规格中时,系统将在模板中呈现模板定义并返回结果。示例资产规格是
package:path/to/template#defname.mako. 这将呈现名为defname里面template.mako模板而不是呈现整个模板。在窗体中返回元组的旧方法('defname', {{}})从视图来看,支持向后兼容性,变色龙ZPT渲染器现在接受资产规格中的宏名称。当宏名称存在于资产规格中时,系统将呈现列为
define-macro并返回结果,而不是呈现整个模板。示例资产规格:package:path/to/template#macroname.pt. 这将使宏定义为macroname内template.pt模板而不是整个模板。当出现谓词不匹配异常(当由于谓词不起作用而没有视图匹配给定请求时,会看到异常),异常现在包含对不匹配谓词的文本描述。
安
add_permission向配置程序中添加了指令方法。该指令注册了一个独立的许可证,可以在Pyramid自省系统中自省。因此,在Pyramid顶部构建的框架可以使用permissions自省的类别数据,以构建运行系统支持的全面权限列表。在添加此方法之前,权限已经在此自省类别中注册,作为在add_view调用,此方法只允许安排将权限放入permissions自省的类别,而不将其与关联视图一起命名。以下是使用add_permission::config = Configurator() config.add_permission('view')
这个
UnencryptedCookieSessionFactoryConfig现在接受signed_serialize和signed_deserialize可用于影响会话编组方式的Hook(默认情况下,这是通过hmac+pickle完成的)。pyramid.testing.DummyRequest现在支持由pyramid.util.InstancePropertyMixin类如set_property.通过添加请求属性和方法
config.set_request_property或config.add_request_method现在提供给粗花呢。通过添加请求属性和方法
config.set_request_property或config.add_request_method现在在从返回的请求对象中可用pyramid.paster.bootstrap.request.context环境要求期间bootstrap如果在提供的请求上尚未设置上下文,则现在是根对象。这个
pyramid.decorator.reify函数现在是API,已添加到API文档中。增加了
pyramid.testing.testConfig上下文管理器,可用于在测试中生成配置程序,例如with testing.testConfig(...):.用户现在可以使用新的
request.invoke_subrequest应用程序编程接口。
废弃¶
这个
pyramid.config.Configurator.set_request_property已弃用文档。该方法仍然可用,但更具特点pyramid.config.Configurator.add_request_method应在其位置使用(它具有所有相同的功能,但也可以使用方法扩展请求对象)。
向后不兼容¶
Pyramid路由器不再添加值
bfg.routes.route或bfg.routes.matchdict到请求的wsgi环境字典。这些值在repoze.bfg1.0(实际上是七个小版本)。如果代码依赖于这些值,请改用request.matched oute和request.matchdict。不能再将环境字典直接传递给
pyramid.traversal.ResourceTreeTraverser.__call__(阿卡ModelGraphTraverser.__call__)相反,您必须传递一个请求对象。自Pyramid1.1以来,传递环境而不是请求已生成拒绝警告。如果您使用
webob.request.LegacyRequest作为请求工厂。legacyRequest类的实例具有request.path_info它返回一个字符串。这个Pyramid释放假设request.path_info将无条件为Unicode。功能来自
pyramid.chameleon_zpt和pyramid.chameleon_text已命名get_renderer,get_template,render_template和render_template_to_response已被删除。自Pyramid1.0以来,这些机构在进口时发出了反预测警告。使用pyramid.renderers.get_renderer(),pyramid.renderers.get_renderer().implementation(),pyramid.renderers.render()或pyramid.renderers.render_to_response而不是这些函数。这个
pyramid.configuration模块已删除。自Pyramid1.0以来,它已被弃用,并在使用时打印了弃用警告。使用pyramid.config相反。这个
pyramid.paster.PyramidTemplate已删除API。它自Pyramid1.1以来就被弃用,并发出了进口警告。如果您的代码依赖于此,请调整代码以导入pyramid.scaffolds.PyramidTemplate相反。这个
pyramid.settings.get_settings()已删除API。自从Pyramid1.0以来,它一直在打印一个反预测警告。如果您的代码依赖于此API,请使用pyramid.threadlocal.get_current_registry().settings或者使用settings请求中可用的注册表属性 (request.registry.settings)这些API来自
pyramid.testing模块被移除。自Pyramid1.0以来,他们一直在打印弃用警告:registerDummySecurityPolicy使用pyramid.config.Configurator.testing_securitypolicy相反。registerResources(阿卡registerModels使用pyramid.config.Configurator.testing_resources相反。registerEventListener使用pyramid.config.Configurator.testing_add_subscriber相反。registerTemplateRenderer(阿卡 registerDummyRenderer )使用 ``pyramid.config.Configurator.testing_add_template` 相反。registerView使用pyramid.config.Configurator.add_view相反。registerUtility使用pyramid.config.Configurator.registry.registerUtility相反。registerAdapter使用pyramid.config.Configurator.registry.registerAdapter相反。registerSubscriber使用pyramid.config.Configurator.add_subscriber相反。registerRoute使用pyramid.config.Configurator.add_route相反。registerSettings使用pyramid.config.Configurator.add_settings相反。
在Pyramid1.3及以上版本中,
__call__在执行任何完成的回调之前调用了响应对象的方法。从本版本开始,__call__调用响应对象的方法 之后 执行完成的回调。这是为了支持request.invoke_subrequest特征。名为的200系列异常响应
HTTPCreated,HTTPAccepted,HTTPNonAuthoritativeInformation,HTTPNoContent,HTTPResetContent和HTTPPartialContent在里面pyramid.httpexceptions不再继承自HTTPOk. 相反,它们从名为HTTPSuccessful. 除非您为注册了异常视图,否则这对您没有影响。HTTPOk并期望异常视图捕获所有上述异常。
文档¶
在叙述性文档中增加了“升级Pyramid”一章。它描述了如何处理PyramidAPI的拒绝和删除,以及如何在运行测试和运行服务器时显示Pyramid生成的拒绝警告。
在文档中添加了“调用子请求”一章。它描述了如何使用新的
request.invoke_subrequest应用程序编程接口。
依赖关系¶
Pyramid现在需要Webob 1.2b3+(之前的Pyramid版本仅依赖于1.2dev+)。这是为了确保我们获得返回
request.path_info作为文本。
1.3(2012年3月21日)¶
漏洞修补¶
什么时候?
pyramid.wsgi.wsgiapp2调用下游的wsgi应用程序,该应用程序的环境将不再具有(已弃用并可能误导)bfg.routes.matchdict或bfg.routes.route钥匙在里面。这个bug的症状是wsgiapp2-包装的Pyramid应用程序发现错误的视图,因为它错误地检测到一个路径是匹配的,而事实上,它不是。对问题的修复https://github.com/pylons/pyramid/issues/461(这使得可以将方法用作视图可调用文件)在使用只声明请求参数的方法时引入了向后不兼容。参见https://github.com/pylons/pyramid/issues/503
1.3B3(2012年3月17日)¶
漏洞修补¶
config.add_view(<aninstancemethod>)引发了涉及__text__. 参见https://github.com/pylons/pyramid/issues/461删除引用以不执行任何操作
pyramid.debug_templates在提供的所有Pyramid中设置.ini文件夹。此设置以前告诉变色龙渲染更好的异常;现在不管此设置的值如何,变色龙总是渲染好的异常。
脚手架¶
这个
alchemy如果创建项目的人忘记运行初始化脚本,scaffold现在会在浏览器中显示一条信息性错误消息。这个
alchemy现在调用scaffold初始化脚本initialize_<projectname>_db而不是populate_<projectname>.
文档¶
由于Pycon US 2012 Sprints的协作,wiki教程得到了改进。
1.3b2(2012年3月2日)¶
漏洞修补¶
方法
pyramid.request.Request.partial_application_url已不在API文档中。它本来是一个私有方法;它在文档中作为API方法发布是一个错误,它被重命名为私有方法。在Windows上使用绝对文件系统路径注册静态视图时,
request.static_url函数无法生成指向其资源的URL。症状:“没有与C:\foo\bar\baz匹配的静态URL定义”。在Windows XP上通过所有测试。
python 3上的acl身份验证检查中的错误:
permits和principals_allowed_by_permission方法pyramid.authorization.ACLAuthenticationPolicy可能返回不适当的True值,条件是acl上的权限是字符串而不是序列,并且仅当acl权限字符串是permission传递给函数的值。这个bug不影响python 2下的Pyramid部署;它是一个bug,只存在于python 3上运行的部署中。它从Pyramid1.3A1开始就存在了。
此错误是由于存在
__iter__python 3下字符串的属性,而python 2中字符串下不存在该属性。
1.3b1(2012年2月26日)¶
漏洞修补¶
pyramid.config.Configurator.with_package如果配置程序是旧样式,则无法工作pyramid.configuration.Configurator实例。Pyramid授权策略没有出现在内省器中。
废弃¶
所有引用
tmpl_context请求变量已从文档中删除。它在Pyramid中的存在让从来就不是塔架使用者的人感到困惑。它被添加为Pyramid1.0中的塔架用户的移植便利,但它从未流行过,因为Pyramid渲染系统与塔架有很大的不同,并且存在其他方法来实现它在塔架中提供的功能。它将继续“永远”存在,但不会在文档中推荐或提及。
1.3A9(2012年2月22日)¶
特征¶
添加一个
introspection配置器构造函数的布尔值。如果这是True,使用配置器注册的操作将注册到自省器。如果是False,他们不会的。默认值是True. 将其设置为False在操作过程中,将阻止对以下任何注册语句进行自省,并将其设置为True将再次启动它们。这个添加是为了满足调试工具栏自己的视图和方法不会出现在内省器中的需求。新API:
pyramid.config.Configurator.add_notfound_view. 这是包装pyramid.Config.configurator.add_view它提供了简单的附加斜杠支持,并对权限做了正确的处理。最好不要打电话add_view直接与context=HTTPNotFound如前所述。新API:
pyramid.view.notfound_view_config. 这是一个类似于pyramid.view.view_config那个电话pyramid.config.Configurator.add_notfound_view扫描时。最好不要使用pyramid.view.view_config具有context=HTTPNotFound如前所述。新API:
pyramid.config.Configurator.add_forbidden_view. 这是包装pyramid.Config.configurator.add_view这是关于权限的正确做法。最好不要打电话add_view直接与context=HTTPForbidden如前所述。新API:
pyramid.view.forbidden_view_config. 这是一个类似于pyramid.view.view_config那个电话pyramid.config.Configurator.add_forbidden_view扫描时。最好不要使用pyramid.view.view_config具有context=HTTPForbidden如前所述。新API:
pyramid.response.FileResponse和pyramid.response.FileIter,用于必须“手动”提供文件的视图。
向后不兼容¶
去除
pyramid.config.Configurator.with_context类方法。它从来不是一个API,它只被pyramid_zcml它的功能已经转移到该包的最新版本。这意味着您需要使用0.9.2或更高版本的pyramid_zcml随着Pyramid的释放。这个
introspector论据pyramid.config.Configurator已删除构造函数API。它已被布尔值替换introspection旗帜。这个
pyramid.registry.noop_introspector已删除API对象。旧款已弃用
set_notfound_view配置器方法现在是新的add_notfound_view配置器方法。同样,旧的被否决set_forbidden_view现在是新的add_forbidden_view. 这有以下影响:context发送到视图(context, request)呼叫签名通过set_notfound_view或set_forbidden_view现在将是异常对象,而不是找到的实际资源上下文。使用request.context以获取实际的资源上下文。也建议停用set_notfound_view赞成add_notfound_view和废弃set_forbidden_view赞成add_forbidden_view尽管有别名。
废弃¶
的API文档
pyramid.view.append_slash_notfound_view和pyramid.view.AppendSlashNotFoundViewFactory被移除。这些名称仍然存在并且仍然是可导入的,但它们不再是API。使用pyramid.config.Configurator.add_notfound_view(append_slash=True)或pyramid.view.notfound_view_config(append_slash=True)得到同样的行为。这个
set_forbidden_view和set_notfound_view从文档中删除了配置器的方法。自从Pyramid1.1以来,它们就被弃用了。
漏洞修补¶
由使用的静态文件响应对象
config.add_static_view打开静态文件两次,只需打开一次。AppendSlashNotFoundViewFactory使用request.path来匹配路由。这是错误的,因为request.path包含脚本名,这将导致它在脚本名不为空的情况下失败。它应该使用request.path_info,现在可以了。
文档¶
更新了“Hooks”一章的“Creating a Not Found View”部分,替换了使用
add_view或view_config随着使用add_notfound_view或notfound_view_config.更新了“Hooks”一章的“Creating a Not Forbidden View”部分,替换了使用
add_view或view_config随着使用add_forbidden_view或forbidden_view_config.更新了“url调度”章节的“重定向到斜线附加路由”部分,替换了使用
add_view或view_config随着使用add_notfound_view或notfound_view_config更新了所有要使用的教程
pyramid.view.forbidden_view_config而不是pyramid.view.view_config具有httpForbidden上下文。
1.3A8(2012年2月19日)¶
特征¶
这个
scanA方法Configurator可以通过ignore参数,可以是字符串、可调用或由字符串和/或可调用项组成的列表。此功能允许扫描子模块、子包和全局对象。看到了吗https://venusian.readthedocs.io/en/latest/#忽略-有关如何使用ignore参数scan.当视图可调用返回无法转换为响应的值时(例如,当视图可调用返回未定义呈现器的字典或根本不返回任何值时),会出现更好的错误消息。错误消息现在包含关于视图可调用本身以及调用结果的信息。
当仅.pyc模块为
config.include-ed.由于错误报告要求,这是不允许的,并且在尝试时会显示更好的错误消息。以前它会失败,比如“attributeError:'nonetype'对象没有属性'rfind'”。添加
pyramid.config.Configurator.add_traverserAPI方法。有关更多信息,请参阅标题为“更改遍历器”的Hooks叙述性文档部分。这不是一个新特性,它只是提供了一个API,用于添加遍历器,而不需要使用ZCA API。添加
pyramid.config.Configurator.add_resource_url_adapterAPI方法。有关详细信息,请参阅标题为“更改pyramid.request.request.resource_url如何生成URL”的hooks叙述性文档部分。这不是一个新特性,它只是提供了一个用于添加资源URL适配器的API,而不需要使用ZCA API。系统值
req现在作为的别名提供给渲染器request. 这意味着您现在可以,例如,在模板中req.route_url(...)而不是request.route_url(...). 这纯粹是为了减少在模板中使用请求方法和属性所需的输入量。价值request仍然可用,这只是一种选择。添加了一个新接口:
pyramid.interfaces.IResourceURL. 实现其接口的适配器可用于在以下情况下重写资源URL生成:request.resource_url被称为。此接口替换了现在已弃用的pyramid.interfaces.IContextURL接口。传递给资源的字典
__resource_url__方法(参见“资源”一章中的“覆盖资源URL生成”)现在包含app_url键,表示在request.resource_url. 它表示可能自定义的URL前缀,其中包含用户传递给的可能自定义方案、主机和端口信息request.resource_url. 应该用它来代替request.application_url必要时。这个
request.resource_urlAPI现在接受这些参数:app_url,scheme,host和port. app_url参数可用于在生成url期间批量替换url前缀。这个scheme,host和port参数可用于替换request.application_url部分地。一个新的API
request.resource_path现在存在。它工作得很像request.resource_url但是会产生一个相对的URL而不是绝对的URL。这个
request.route_urlAPI现在接受这些参数:_app_url,_scheme,_host和_port. 这个_app_url参数可用于在URL生成过程中批量替换URL前缀。这个_scheme,_host和_port参数可用于替换request.application_url部分地。
向后不兼容¶
这个
pyramid.interfaces.IContextURL接口已弃用。已经指示人们使用它在“Hook”一章中注册一个资源URL适配器来影响request.resource_url自Pyramid1.0以来通过自定义遍历器找到的资源的URL生成。接口仍然存在,注册这样一个适配器仍然有效,但是这个接口将在几个主要的Pyramid版本发布后从软件中删除。你应该用等价物来代替它
pyramid.interfaces.IResourceURL适配器,使用新的pyramid.config.Configurator.add_resource_url_adapter应用程序编程接口。当pyramid.interfaces.IContextURL在以下情况下找到适配器request.resource_url被称为。
文档¶
不要创建
session实例在sqla wiki教程中,使用rawDBSession相反(这在真正的sqla应用中更常见)。
脚手架¶
放
pyramid.includes目标在独立的线脚手架的ini文件中,以便能够告诉人们只评论pyramid_debugtoolbar行,当他们想禁用工具栏时。
依赖关系¶
依靠
venusian>=1.0A3提供扫描ignore支持。
内部的¶
创建一个“makorenderfactoryhelper”,提供可自定义的设置键前缀。允许设置前缀而不是“mako”。用于创建不使用全局mako设置的不同工厂。这将对调试工具栏很有用,该工具栏当前可能被使用自定义Mako配置设置的人破坏。
1.3A7(2012年2月7日)¶
特征¶
当
config.include找不到includeme. 请参阅https://github.com/pylons/pyramid/pull/392。内部:尽早捕获不可清除的鉴别器(引发错误而不是允许他们找到进入resolveConflicts的方法)。
这个 match_param 视图谓词现在接受字符串或元组。这将取代接受dict的破坏行为。有关详细信息,请参阅https://github.com/pylons/pyramid/issues/425。
漏洞修补¶
当
pserve用于--reload当标志development.ini文件(或使用中的任何其他.ini文件)已更改。请参阅https://github.com/pylons/pyramid/issues/377和https://github.com/pylons/pyramid/pull/411这个
prequest当用于不返回HTML或文本的URL时,脚本将失败。参见https://github.com/pylons/pyramid/issues/381
向后不兼容¶
这个 match_param 视图谓词不再接受dict。这不会产生负面影响,因为基于dict的参数的实现已中断。
文档¶
在叙述文档中添加横向的hello world示例。
1.3A6(2012年1月20日)¶
特征¶
新API:
pyramid.config.Configurator.set_request_property. 向请求添加惰性属性描述符,而不更改请求工厂。此方法提供冲突检测,是向请求添加属性的建议方法。金字塔的反应
static_view现在使用wsgi.file_wrapper(请参阅https://www.python.org/dev/peps/pep-0333/可选平台特定文件处理),如果Web服务器提供了一个文件处理。
漏洞修补¶
在中注册的视图
accept无法用具有相同谓词参数的其他视图正确重写。更多信息请参见https://github.com/pylons/pyramid/pull/404。当为
view参数Configurator.add_view指的是一个类view_defaultsdecorator,将不应用视图默认值。请参阅https://github.com/pylons/pyramid/issues/396。静态URL路径被URL引用了两次。请参阅https://github.com/pylons/pyramid/issues/407。
1.3A5(2012年1月9日)¶
漏洞修补¶
这个
pyramid.view.view_defaults当多个视图依赖不同的默认值来解决配置冲突时,装饰器无法正常工作。请参阅https://github.com/pylons/pyramid/issues/394。
向后不兼容¶
这个
path_info路由和视图谓词现在与匹配request.upath_info(Unicode)而不是request.path_info(基于python 3与python 2的不确定值)。必须这样做才能规范化python 2和python 3上的匹配。
1.3A4(2012-01-05)¶
特征¶
新API:
pyramid.request.Request.set_property. 在不更改请求工厂的情况下向请求添加惰性属性描述符。新属性可以被重新定义,有效地缓存实例生命周期的值。这种方法的常见用例是获取请求的数据库连接或标识当前用户。使用
waitresswsgi服务器而不是wsgiref在脚手架中。
漏洞修补¶
文件
pyramid.events.subscriber指示将其用作没有类似以下参数的装饰器:@subscriber() def somefunc(event): pass
将登记
somefunc接收通过注册表发送的所有事件,但这是不真实的。相反,它不会接收任何事件。现在已修复此问题,代码与文档匹配。另请参见https://github.com/pylons/pyramid/issues/386路由模式的文本部分在
route_url或route_path用于生成URL或路径。结果
route_path或route_url可能是unicode或str取决于输入。现在保证永远str.当模式在文本部分包含非ASCII字符时,URL匹配不确定。现在提供给
add_route假设为:unicode值,或str仅包含ASCII字符的值。如果现在想要匹配包含高阶字符的URL的路径信息,可以在模式中传递解码路径部分的Unicode表示。当使用
traverse=如果遍历模式或匹配的动态段中存在任何高阶字符,则路由谓词遍历将失败,并出现urldecodeerror。使用名为
traverse以这样的路线模式:config.add_route('trav_route', 'traversal/{traverse:.*}')
会引起
UnicodeDecodeError当路由匹配并且URL的匹配部分包含任何高阶字符时。请参阅https://github.com/pylons/pyramid/issues/385。当使用
*traverse在路由模式中,一个与拥有@@在其名称中(表示视图名称)在遍历过程中被遍历机器不适当地引用,导致视图找不到正确的位置。请参阅https://github.com/pylons/pyramid/issues/382和https://github.com/pylons/pyramid/issues/375。
向后不兼容¶
传递给的字符串值
route_url或route_path这意味着取代“剩余”匹配现在将被URL引用除了嵌入斜杠。例如::config.add_route('remain', '/foo*remainder') request.route_path('remain', remainder='abc / def') # -> '/foo/abc%20/%20def'
以前作为余数替换传递的字符串值附加在未接触的字符串上,没有任何URL引用。但是,如果传递的值是unicode(原始unicode不能放在URL或路径中),并且如果该值是字符串(除非被调用方引用,否则不会被引用),则在逻辑上这并不起作用。
有些人会依赖旧的行为来附加查询字符串元素和URL的锚定部分;对不起,您需要更改代码以使用
_query和/或_anchor论据route_path或route_url现在就这么做。如果将包含非ASCII字符的字节串传递给
add_route作为一种模式,它现在将在启动时失败。改为使用Unicode。
1.3A3(2011年12月21日)¶
特征¶
增加了一个
prequest脚本(沿着paster request)它记录在标题为“调用请求”部分的“命令行Pyramid”一章中。添加未记录的
__discriminator__派生视图可调用文件的API。例如adapters.lookup(...).__discriminator__(context, request). 它将被超动态系统使用,这些系统要求在手动查找视图后使用鉴别器进行自省。
漏洞修补¶
标准化出口值和
-h全输出p*脚本 (pviews,proutes等)。
文档¶
在“命令行Pyramid”一章中添加了一个名为“将脚本制作成控制台脚本”的部分。
从主文档中删除了“在谷歌应用引擎上运行金字塔”教程。它在食谱上流传下来(https://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/deployment/gae.html). 理由:它只为python2.5版本的GAE提供正确的信息,而这个版本的Pyramid不支持python2.5。
1.3A2(2011年12月14日)¶
特征¶
新API:
pyramid.view.view_defaults. 如果使用类作为视图,则可以使用view_defaults类上的类修饰符,以提供每个@view_config修饰该类的方法的修饰器。它还针对涉及强制类的视图配置工作。添加了向后兼容性旋钮
pcreate仿真paster create处理--list-templates选择权。对脚手架机械进行了一些改动,以使想要使用可在Pyramid1.0.x、1.1.x、1.2.x和1.3.x上工作的扩展脚手架的人更容易操作。有关更多信息,请参阅叙述文档中新的“创建Pyramid脚手架”一章。
文档¶
将文档添加到“视图配置”叙述文档章节
view_defaults类修饰器。为添加了API文档
view_defaults类修饰器。为添加了API文档章节
pyramid.scaffolds.增加了一个名为“创建Pyramid脚手架”的叙述性文档章节。
向后不兼容¶
这个
template_renderer方法pyramid.scaffolds.PyramidScaffold重命名为render_template. 如果您要覆盖它,那么您就是一个坏人,因为它以前不是API。但是我们很好,所以我们会告诉你。
1.3A1(2011年12月9日)¶
特征¶
python 3.2兼容性。
新的
pyramid.compat模块和API文档,为Pyramid附加组件和开发环境提供python 2/3跨越式支持。A
mako.directories使用mako模板不再需要设置理由:可以使用绝对资产规格指定mako模板渲染器。可以使用此类资产规格编写整个应用程序,无需排序查找路径。bpython中的解释程序兼容性pshell. 有关更多信息,请参阅“命令行Pyramid”叙述文档一章。补充
get_appsettingsAPI函数pyramid.paster模块。此函数返回在[app:...]pastedeploy ini文件中的节。补充
setup_loggingAPI函数pyramid.paster模块。此函数根据pastedeploy ini文件中的日志配置设置python日志记录。配置冲突报告以更易于理解的方式报告(“文件中的第11行…”,而不是类似信息的元组的repr)。
增加了配置自省系统;更多信息,请参阅标题为“Pyramid配置自省”的叙述性文档章节。新API:
pyramid.registry.Introspectable,pyramid.config.Configurator.introspector,pyramid.config.Configurator.introspectable,pyramid.registry.Registry.introspector.允许将额外的关键字参数传递给
pyramid.config.Configurator.action方法。新API:
pyramid.path.AssetResolver和pyramid.path.DottedNameResolver. 前者可用于解析资产规格,后者可用于解析模块或包的点名称。
漏洞修补¶
使测试套件通过32位系统;关闭286。关闭306。另请参见https://github.com/pylons/pyramid/issues/286
这个
pyramid.view.view_config装饰师不接受match_params谓词参数。参见https://github.com/pylons/pyramid/pull/308AuthtktCookieHelper可能会在
tokens使用了要记住的论点。参见https://github.com/pylons/pyramid/pull/314。AuthtktAuthenticationPolicy未使用支持时间攻击的字符串比较器。更多信息请参见https://github.com/pylons/pyramid/pull/320。
在
pyramid.testing现在,如果一个CSRF令牌还不存在,则生成一个新的CSRF令牌。request.static_url现在生成URL引用的URLpath包含不适合URL的字符的参数。更多信息请参见https://github.com/pylons/pyramid/issues/349。防止命名脚手架呈现
site(与python internal site.py冲突)。支持将实例用作
pyramid.wsgi.wsgiapp和pryramid.wsgi.wsgiapp2功能。更多信息请参见https://github.com/pylons/pyramid/pull/370。
向后不兼容¶
pyramid不再运行在python 2.5上(在本文撰写之时,它包括jython的最新版本和gae的python 2.5版本)。
这个
paster命令不再是创建项目、启动服务器或运行调试命令的文档化方式。要从脚手架创建项目,paster create替换为pcreate控制台脚本。为一个项目服务,paster serve替换为pserve控制台脚本。名为的新控制台脚本pshell,pviews,proutes和ptweens做他们的事paster <commandname>过去的等价物。理由:Paste和PasteScript包不在Python3下运行。默认的wsgi服务器作为
pserve新粉刷的脚手架现在是wsgirefwsgi服务器而不是paste.httpserver服务器。理由:理由:粘贴和粘贴脚本包不在Python3下运行。这个
pshell命令(参见“paster pshell”)不再接受--disable-ipython命令行参数。相反,它接受-p或--python-shell参数,可以是任何值python,ipython或bpython.移除
pyramid.renderers.renderer_from_name功能。自Pyramid1.0以来,它已被弃用,并且从未是API。要将zcml与pyramid>=1.3的版本一起使用,您需要
pyramid_zcml版本>=0.8和zope.configuration版本>=3.8.0。这个pyramid_zcml包版本0.8向后兼容到Pyramid1.0,因此如果安装了旧版本并“就位”升级Pyramid,您将不会收到警告;相反,它可能会断开。
依赖关系¶
Pyramid不再依赖于
zope.component包,作为测试依赖项除外。Pyramid现在依赖于zope.interface>=3.8.0,webob>=1.2dev,repoze.lru>=0.4,zope.deprecation>=3.5.0,translationString>=0.4(用于python 3兼容性目的)。它还作为测试依赖项,出于同样的原因依赖于WebTest>=1.3.1。
Pyramid不再依赖于粘贴或粘贴脚本包。
文档¶
sqlacalchemy wiki教程已更新。现在使用
@view_config修饰器和显式数据库填充脚本。zodb wiki教程的小更新。
添加了一个名为“扩展Pyramid配置”的叙述性文档章节;它描述了如何添加新指令以及如何使用
pyramid.config.Configurator.action自定义指令中的方法。它还描述了如何添加自省对象。增加了一个名为“Pyramid结构反思”的叙述性文档章节。介绍了如何查询自省系统。
脚手架¶
渲染的脚手架现在已经被更改为更可重定位(在包中的文件中很少提到包名称)。
这个
routesalchemy脚手架已重命名alchemy,替换旧的(基于遍历)alchemy脚手架(已退休)。这个
starter默认情况下,scaffold现在使用URL调度。
1.2(2011年9月12日)¶
特征¶
路由模式替换标记名称现在可以以下划线开头。请参阅https://github.com/pylons/pyramid/issues/276。
1.2b3(2011年9月11日)¶
漏洞修补¶
在“include”中添加静态视图时未考虑路由前缀。参见https://github.com/pylons/pyramid/issues/266。
1.2B2(2011年9月8日)¶
漏洞修补¶
1.2b1 tarball是一个brownbag(特别是对于Windows用户),因为它包含的文件名在不适当的地方带有引号。我们依靠
setuptools-git为了生成发布tarball,当运行它来生成1.2b1 tarball时,它还不能很好地处理Git存储库中文件名中包含高阶字符的文件。
文档¶
对“引言”叙述章节示例应用程序和措辞的细微改动。
1.2b1(2011年9月8日)¶
漏洞修补¶
有时会从地域翻译中退缩 (
de_DE)到语言翻译 (de)使用定位器时无法正常工作。参见https://github.com/pylons/pyramid/issues/263静态文件服务机制无法服务以
.(点)字符。静态视图无法提供名称中包含高阶(超级ASCII)字符的静态文件。当从文件系统请求文件时,为机器提供服务的静态文件在文件名中不适当地使用了URL引用的路径段。
内
pyramid.traversal.traversal_path, canonicalize URL segments from UTF-8 to Unicode before checking whether a segment matches literally one of., the empty string, or..以防有人在解码前通过与文本不匹配的UTF-8对这些字符串进行隧道传输。
文档¶
在引言叙述章节中增加了“Pyramid的独特之处”一节。
1.2A6(2011年9月6日)¶
漏洞修补¶
authtktauthenticationpolicy具有
reissue_time干扰注销。请参阅https://github.com/pylons/pyramid/issues/262。
内部的¶
将以前依赖的代码内化为从
paste.auth模块(FutureProof)。替代使用
paste.urlparser.StaticURLParser使用ChrisRossi的“快乐”静态文件服务代码(FutureProof)的派生。固定测试套件;在某些系统上,由于测试运行顺序不确定和共享测试变量的双推单弹出,测试将失败。
行为差异¶
当服务静态文件时,不再设置etag头。设置最后修改的标题。
静态文件服务不再支持
wsgi.file_wrapper延伸。而不是返回
403 Forbidden错误:当提供的静态文件由于文件权限而无法被Pyramid进程的用户访问时,将引发IOERROR(或类似的)错误。
脚手架¶
所有脚手架现在都发送
cache_max_age参数add_static_view方法。
1.2A5(2011年9月4日)¶
漏洞修补¶
这个
route_prefix在某些情况下,在注册路由时没有正确考虑配置器的。参见https://github.com/pylons/pyramid/issues/260
依赖关系¶
这个
zope.configuration包不再是依赖项。
1.2A4(2011年9月2日)¶
特征¶
支持一个
onerror关键字参数pyramid.config.Configurator.scan(). 此onerror关键字参数传递给venusian.Scanner.scan()在扫描期间引发异常时影响错误行为。这个
request_method谓词参数pyramid.config.Configurator.add_view和pyramid.config.Configurator.add_route现在允许是HTTP方法名的元组。以前它被限制为表示单个HTTP方法名的字符串。未删节的
pyramid.traversal.find_model,pyramid.traversal.model_path,pyramid.traversal.model_path_tuple和pyramid.url.model_url在Pyramid1.0中都被弃用了。把它们作为它们重命名后的别名永远保留下来,只需要很少的成本。resource_*带前缀的函数。未删节的
pyramid.view.bfg_view在Pyramid1.0中已弃用。这是一个低成本的别名pyramid.view.view_config我们将永远留在这里。
依赖关系¶
Pyramid现在需要金星1.0A1或更好的支持
onerror关键字参数pyramid.config.Configurator.scan.
1.2A3(2011年8月29日)¶
漏洞修补¶
Pyramid没有正确生成静态URL
pyramid.url.static_url由于1.2A1中的重构而传递调用程序包的相对路径时。这个
settings对象在任何时候都发出拒绝警告__getattr__被召唤。然而,在一些合法的情况下__getattr__对任意对象(例如hasattr)现在,settings对象仅在成功查找时发出警告。
内部的¶
使用
config.with_package在视图中配置decorator而不是制造新的渲染器助手(清理)。
1.2A2(2011年8月27日)¶
漏洞修补¶
当A
renderers=参数没有指定给配置器构造函数,而是急切地注册并提交默认的呈现器集。这允许覆盖默认的渲染器,该渲染器在1.2A1中被破坏,在配置器构造之后没有直接提交。Mako呈现异常的错误消息值错误。
include无法成功设置根工厂,因为配置器构造函数无条件地注册了一个根工厂,该根工厂将被视为“用户的字”。
特征¶
现在可以使用点式名称语法传入会话工厂。
1.2A1(2011年8月24日)¶
特征¶
这个
[pshell]ini配置文件中的节现在处理setup键作为点名称,指向传递给引导环境的可调用项。它可以改变大正义所需的环境。名为的新配置设置
pyramid.includes现在可用。在“环境变量和.ini“文件设置”叙述性文档章节。增加了一个
route_prefix论据pyramid.config.Configurator.include方法。此参数允许您将URL调度应用程序组合在一起。请参阅“URL调度”叙述性文档章节中标题为“使用路由前缀组成应用程序”的部分。增加了一个
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.config.Configurator.add_tween. 此指令添加了一个“tween”。“tween”用于包装Pyramid路由器的主要请求处理功能。这是Pyramid框架扩展可以使用的一个特性,例如,提供视图计时支持,并作为挂起簿记代码的方便位置。Tweens在Hooks一章的叙述文档一节中作了进一步的描述,称为“注册Tweens”。
新建粘贴程序命令
paster ptweens打印应用程序的当前“tween”配置。有关更多信息,请参阅叙述文档的命令行Pyramid章节中标题为“显示Tweens”的部分。Pyramid调试记录器现在使用标准的日志配置(通常通过粘贴作为启动的一部分来设置)。这意味着,例如
debug_notfound,debug_authorization等将进入正常的测井通道。调试记录器的记录器名称将是 呼叫者 配置器的构造函数。请求对象上有一个新属性可用:
exc_info. 它的价值将是None直到一个异常被Pyramid路由器捕获,之后它将是sys.exc_info().pyramid.testing.DummyRequest现在实现add_finished_callback和add_response_callback方法。新的方法
pyramid.config.Configurator类:set_authentication_policy和set_authorization_policy. 这些内容主要由附加组件作者使用。新的配置器方法:
set_root_factory.Pyramid不再急于在配置器构造时提交一些默认的配置语句,这允许将值作为构造函数参数(例如
authentication_policy和authorization_policy)覆盖通过“包含”获得的相同设置。更好的Mako渲染例外通过
pyramid.mako_templating.MakoRenderingException新的请求方法:
current_route_url,current_route_path和static_path.中的新函数
pyramid.url:current_route_path和static_path.这个
pyramid.request.Request.static_urlAPI(及其同类产品)pyramid.request.Request.static_path,pyramid.url.static_url和pyramid.url.static_path)现在接受一个asbolute文件名作为“path”参数。只要文件名位于以前注册为静态视图的目录中,就会生成指向资产的URL。以前,尝试使用绝对文件路径生成资产的URL会引发ValueError。这个
RemoteUserAuthenticationPolicy `` , ``AuthTktAuthenticationPolicy和SessionAuthenticationPolicy构造函数现在接受一个名为debug. 默认情况下,此关键字参数为False. 当它是True,当authenticated_userid或effective_principals对这些策略中的任何一个调用方法。当试图诊断与身份验证相关的问题时,生成的输出可能很有用。新建视图谓词:
match_param. 示例:通过添加的视图config.add_view(aview, match_param='action=edit')只有当request.matchdict其中有一个名为的值action具有价值edit.
内部的¶
Pyramid的“例外视图”机器现在作为一个“中间人”来实现。 (
pyramid.tweens.excview_tween_factory)wsgihttpException(httpFound、httpNotFound等)现在有了一个名为“Prepare”的新API,当为其提供wsgi环境时,该API将呈现正文和内容类型。调试工具栏需要。
一次
__call__或prepare在wsgihttpException上调用,将设置正文,并随后调用__call__将始终返回相同的主体。删除body属性以重新传递异常体。以前
pyramid.events.BeforeRender事件 包 一本词典_system属性)。现在它 is 字典(它继承自dict,它是作为顶级字典传递给模板的值。这个
route_url,route_path,resource_url,static_url和current_route_url中的函数pyramid.url包现在根据已经传递的请求委托给一个方法,而不是反过来。现在,pyramid.request.request对象从名为pyramid.url.urlmethodmixin的mixin继承以实现此目的,并且所有URL/路径生成逻辑都嵌入到此mixin中。重构
pyramid.config进入一个包。移除
_set_security_policies配置器的方法。感动了
StaticURLInfo类从pyramid.static到pyramid.config.views.移动
Settings类从pyramid.settings到pyramid.config.settings.移动
OverrideProvider,PackageOverrides,DirectoryOverride和FileOverride类来自pyramid.asset到pyramid.config.assets.
废弃¶
所有与Pyramid相关的部署设置(例如
debug_all,debug_notfound)现在要加前缀pyramid.. 例如:debug_all>pyramid.debug_all. 旧的无前缀设置将无限期地继续工作,但提供这些设置最终可能会打印一个拒绝警告。所有脚手架和教程都已更改为使用前缀设置。这个
settings当您试图通过__getattr__而不是通过__getitem__.
向后不兼容¶
如果字符串作为
debug_logger配置程序的参数,该字符串被认为是全局python记录器的名称,而不是记录器实例的点状名称。这个
pyramid.config.Configurator.include方法现在只接受一个callable参数(以前允许使用的可调用序列)。如果你超过一个callable到pyramid.config.Configurator.include,它会断裂。现在您必须对每个可调用的方法进行单独的调用。这一变化是为了支持route_prefixinclude的功能。在使用“自动提交”配置程序时,可能需要更strict地对配置路由和视图语句进行排序。在过去,当您使用自动提交配置程序时,可以在添加具有该名称的路由之前添加一个名为路由名称的视图。例如::
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是自动提交配置程序)。解决这一问题的正确方法是使用非自动提交配置程序(默认设置),它没有这些指令排序要求。这个
pyramid.config.Configurator.add_route指令不再返回路由对象。为了使路由与视图配置处理正常工作,需要进行此更改。
文档¶
使用
route_url,route_path,resource_url,static_url和current_route_url中的函数pyramid.url包现在已更改为使用请求的同名方法。在“URL调度”叙述性文档一章中增加了一节,标题为“使用路由前缀编写应用程序”。
向API文档添加了一个新模块:
pyramid.tweens.在“Hook”叙述章节中增加了“登记吐温”部分。
在“命令行Pyramid”的叙述章节中增加了一个“显示中间人”部分。
添加的文档
pyramid.tweens和pyramid.includes“环境变量和.ini文件设置”章节。在叙述文档中添加了一个日志章节(基于塔架日志文档,谢谢Phil)。
在叙述文档中添加了粘贴章节(从项目章节中移动内容)。
增加了
pyramid.interfaces.IDict表示字典方法的接口,仅用于文档目的(IMultidict和IBeferender从中继承)。所有教程现在都使用-
route_url,route_path,resource_url,static_url和current_route_url请求的方法,而不是从中导入的函数变量pyramid.url.zodb wiki教程现在使用
pyramid_zodbconn包而不是repoze.zodbconn提供ZODB集成的包。
依赖关系更改¶
Pyramid现在依赖于pastescript>=1.7.4。此版本包含允许灵活日志配置的重要功能。
脚手架¶
所有脚手架现在都使用
pyramid_tm包而不是repoze.tm2管理事务管理的中间件。ZODB脚手架现在使用
pyramid_zodbconn包而不是repoze.zodbconn提供ZODB集成的包。所有脚手架现在都使用
pyramid_debugtoolbar包而不是WebError提供交互式调试功能的包。通过脚手架创建的项目不再依赖于
WebError包;配置在production.ini用于要求其error_catcher中间件已被删除。配置错误捕获/电子邮件发送现在是pyramid_exclog包(请参阅https://docs.pylonsproject.org/projects/pyramid-exclog/en/latest/)。
漏洞修补¶
修复了默认渲染器在特定时间不工作的问题。参见https://github.com/pylons/pyramid/issues/249
1.1(2011年7月22日)¶
特征¶
增加了
pyramid.renderers.null_renderer对象作为API。空呈现器是一个对象,可以在高级集成案例中用作视图配置的输入。renderer=参数。当将空呈现器用作视图呈现器参数时,Pyramid避免将视图可调用结果转换为响应对象。如果您想在Pyramid路由器使用的上下文之外重用视图配置和查找机器,这是很有用的。此功能已由添加以供使用pyramid_rpc包,它使用视图配置和在路由器上下文之外的查找,完全是这样。pyramid_rpc从1.1b1开始,它就在1.1下被打破了;加上它,我们可以让它再次工作。更改指向docs.pylonsproject.org的所有脚手架模板以使用
/projects/pyramid/current而不是/projects/pyramid/dev.
内构件¶
去除
compat仅用于提供与Python2.4向后兼容性的代码。为非API函数添加反预测警告
pyramid.renderers.renderer_from_name在野外也有使用。添加
clone方法到pyramid.renderers.RendererHelper供使用pyramid.view.view_config装饰者。
文档¶
修复了wiki2(sqla+url-dispatch)教程中的两个拼写错误。
重新编排叙述部分的章节,以获得更好的新用户友好性。
向文档中的节添加了更多索引标记。
1.1B4(2011年7月18日)¶
文档¶
在“命令行Pyramid”一章中增加了一个标题为“编写脚本”的部分。
向后不兼容¶
我们添加了
pyramid.scripting.make_requestAPI在1.1B3中过于仓促。它已被移除。抱歉给您带来不便。使用pyramid.request.Request.blankAPI代替。
特征¶
这个
paster pshell,paster pviews和paster proutes命令现在在引擎盖下使用pyramid.paster.bootstrap从而可以提供.ini不命名文件中指向实际Pyramid应用程序的“右”部分的文件。相反,你通常可以只跑paster {{pshell|proutes|pviews}} development.ini它将做最正确的事情。
漏洞修补¶
在中呈现自定义异常模板时省略自定义环境变量
pyramid.httpexceptions.WSGIHTTPException._set_default_attrs;字符串化THSE可能触发不应执行的代码;请参阅https://github.com/pylons/pyramid/issues/239
1.1B3(2011年7月15日)¶
特征¶
修复角情况以简化视图的半功能测试:创建新的renderinfo以在重新扫描时清除旧注册表。请参阅https://github.com/pylons/pyramid/pull/234。
新API类:
pyramid.static.static_view. 这将取代已弃用的pyramid.view.static类。pyramid.static.static_view默认情况下,将文档作为请求的结果path_info,属性而不是subpath属性(与之相反的是pyramid.view.static,仍然是)。pyramid.static.static_view暴露一个use_subpath当您希望静态视图的行为类似于旧的已弃用版本时使用的标志。一个新的API函数
pyramid.paster.bootstrap已添加以使编写可轻松引导Pyramid环境的脚本,例如:from pyramid.paster import bootstrap info = bootstrap('/path/to/my/development.ini') request = info['request'] print request.route_url('myroute')
一个新的API函数
pyramid.scripting.prepare已添加。这是一个较低水平的模拟pyramid.paster.boostrap它接受一个请求和一个注册表而不是一个配置文件参数,并用于相同的目的:from pyramid.scripting import prepare info = prepare(registry=myregistry) request = info['request'] print request.route_url('myroute')
一个新的API函数
pyramid.scripting.make_request已添加。结果请求将具有registry属性。它是用来与pyramid.scripting.prepare和/或pyramid.paster.bootstrap(两者都接受一个请求作为参数)::from pyramid.scripting import make_request request = make_request('/')
新建API属性
pyramid.config.global_registries是一个iterable对象,它包含对加载到当前进程的每个Pyramid注册表的引用,方法是pyramid.config.Configurator.make_app. 它还有一个last包含上次加载的注册表的属性。这是由脚本机制使用的,并且可用于自省。
废弃¶
这个
pyramid.view.static类已被弃用,取而代之的是较新的pyramid.static.static_view类。使用时会发出弃用警告。您应该用引用替换它pyramid.static.static_view与use_subpath=True参数。
漏洞修补¶
如果没有为域/区域设置组合加载mo文件,
pyramid.i18n.Localizer.pluralize使用该域/区域设置组合运行时引发了一个不可破解的“translations object has no attr'plural'”错误。现在,它“起作用”(默认情况下它使用日耳曼复数)。尝试将某些内容复数化而不翻译该区域设置/域是毫无意义的,但此行为与pyramid.i18n.Localizer.translate所以它至少是一致的;参见https://github.com/pylons/pyramid/issues/235。
1.1B2(2011年7月13日)¶
特征¶
新环境设置
PYRAMID_PREVENT_HTTP_CACHE和新的配置文件值prevent_http_cache. 这些是同步的,允许您防止HTTP缓存头由Pyramid设置http_cache一个过程中的全球机械。请参阅“视图配置”叙述章节的“影响HTTP缓存”部分,以及“环境变量和配置设置”叙述章节中有关此设置的详细文档。
行为改变¶
以前,如果
BeforeRender事件订阅服务器通过__setitem__或update具有已存在于渲染器全局字典中的键的事件对象的方法,KeyError提高了。由于配置器的“添加渲染器全局”功能遭到拒绝,因此无法覆盖已存在的渲染器全局字典中的现有值。现在,事件对象将覆盖Globals字典中已经存在的旧值,当__setitem__或update被称为(以及新的setdefault方法),就像一本普通的旧字典。因此,为了实现与其他第三方订阅服务器的最大互操作性,如果您编写了一个事件订阅服务器,该事件订阅服务器将被用作beforerender订阅服务器,那么您的订阅服务器代码现在需要(使用.get或__contains__在设置覆盖值之前,请确保渲染器全局字典中没有值。
漏洞修补¶
这个
Configurator.add_route方法允许添加具有相同路由的两个路由,但不添加中间路由config.commit(). 如果你现在收到ConfigurationError在启动时,add_route相关,您需要a)确保所有路由名称都是唯一的或b)呼叫config.commit()在使用先前添加的名称添加第二个路由之前,或c)使用在autocommit模式。这个
pyramid_routesalchemy和pyramid_alchemy脚手架使用不当DBSession.rollback()而不是transaction.abort()在一个地方。我们现在明白了
request.response在调用异常视图之前,异常视图将处理在异常之前未被任何代码接触过的request.response。使用棱锥图时,可能未正确查找与路由名称中包含空格的路由关联的视图。
zope.interface3.6.4及以上。请参阅https://github.com/pylons/pyramid/issues/232。
文档¶
wiki2(sqlacalchemy+url调度)教程
models.initialize_sql不匹配pyramid_routesalchemy同名的scaffold函数;在scaffold中更改时,它没有同步。视图配置叙述章节中的新文档部分:“影响HTTP缓存”。
1.1B1(2011年7月10日)¶
特征¶
现在可以调用
paster pshell即使其参数中指向的粘贴ini文件节名实际上不是PyramidWSGi应用程序。shell将在降级模式下工作,并警告用户。请参见“创建Pyramid项目”叙述文档部分中的“交互式Shell”。paster pshell现在默认提供更多内置全局变量(包括app和settings)请参见“创建Pyramid项目”叙述文档部分中的“交互式Shell”。现在可以添加
[pshell]应用程序的.ini配置文件的部分,它影响pshell会话可用的全局名称。参见“创建Pyramid项目”叙述性文档一章中的“扩展Shell”。这个
config.scan方法已成长为**kw参数。kw参数表示要传递给金星人的一组关键字参数Scanner由Pyramid创建的对象。(有关更多信息,请参见金星文档Scanner)新请求属性:
json_body. 此属性将返回请求体的JSON解码变量。如果请求主体不是格式良好的JSON,则此属性将引发异常。一种新的价值
http_cache可以用作视图配置参数。当你提供一个
http_cache视图配置的值,Expires和Cache-Control由关联视图可调用生成的响应的头将被修改。价值http_cache可能是下列之一:非零整数。如果它是一个非零整数,它被视为秒数。此秒数将用于计算
Expires报头和Cache-Control: max-age调用此视图的请求的响应参数。例如:http_cache=3600指示请求浏览器“将此响应缓存一小时”。A
datetime.timedelta实例。如果是datetime.timedelta例如,它将被转换为秒数,该秒数将用于计算Expires报头和Cache-Control: max-age调用此视图的请求的响应参数。例如:http_cache=datetime.timedelta(days=1)指示请求浏览器“将此响应缓存一天”。零 (
0)如果值为零,则Cache-Control和Expires来自此视图的所有响应中存在的头将被组成,这样客户端浏览器缓存(以及任何中间缓存)将被指示从不缓存响应。一个二元组。如果是两元组(例如
http_cache=(1, {{'public':True}}),元组中的第一个值可以是非零整数或datetime.timedelta实例;无论哪种情况,此值都将用作缓存响应的秒数。元组中的第二个值必须是字典。字典中的值将用作Cache-Control响应头。例如:http_cache=(3600, {{'public':True}})表示“缓存一小时,然后添加”public到响应“”的缓存控制头。支持的所有键和值webob.cachecontrol.CacheControl接口可以添加到字典中。供应{{'public':True}}等于调用response.cache_control.public = True.
提供非元组值作为
http_cache等于调用response.cache_expires(value)在你的视野内。提供两元组值作为
http_cache等于调用response.cache_expires(value[0], **value[1])在你的视野内。如果你想避免影响,那么
Expires标题,而只希望影响Cache-Control头,传递元组为http_cache第一个元素是None,例如:(None, {{'public':True}}).
漏洞修补¶
原始视图的框架包装器(如http-cached等)依赖于能够信任他们接收到的响应是一个IResponse。这并不总是如此,因为响应是由路由器解决的,而不是在视图包装过程的早期。这个问题已经解决了。
文档¶
在“webob”章节中添加了一节,名为“处理JSON编码的请求体”(使用
request.json_body)
行为改变¶
这个
paster pshell,paster proutes和paster pviews命令现在采用表单中的单个参数/path/to/config.ini#sectionname而不是前两个参数的拼写/path/to/config.ini sectionname.#sectionname可省略,在这种情况下#main假设。
1.1A4(2011年7月1日)¶
漏洞修补¶
pyramid.testing.DummyRequest当属性不推荐用于pyramid.request.Request被访问(如response_content_type)这是为了让运行单元测试的人员受益,他们使用DummyRequest而不是“实际”请求,因此他们知道不推荐使用功能测试套件。这个
pyramid.events.subscriber当将多个接口对象传递给其构造函数时,指令的行为与文档相反。例如,注册以下侦听器时:@subscriber(IFoo, IBar) def expects_ifoo_events_and_ibar_events(event): print event
事件章节文档声称监听器将注册并监听
IFoo和IBar事件。相反,它注册了一个“对象事件”订阅服务器,只有在对象接口所在的位置发出IObjectEvent时才会调用该订阅服务器。IFoo事件接口是IBar.该行为现在与文档匹配。如果你依赖1.0的马车行为
subscriber指令要注册对象事件订阅服务器,现在必须传递一个序列,以指示要为对象事件注册订阅服务器。例如。::@subscriber([IFoo, IBar]) def expects_object_event(object, event): print object, event
特征¶
添加JSONP渲染器(请参见文档的“渲染器”一章中的“JSONP渲染器”)。
废弃¶
贬低
set_renderer_globals_factory配置器的方法和renderer_globals配置器构造函数参数。
文档¶
wiki和wiki2教程的“测试”章节都有两个错误:两个错误都没有告诉用户依赖webtest,两个测试由于对Pyramid本身的更改而失败。这些问题已得到解决。
将1.0.x changes.txt条目移动到history.txt。
1.1A3(2011年6月26日)¶
特征¶
补充
mako.preprocessorconfig file参数;允许将mako预处理器指定为python可调用或python点式名称。基本原理见https://github.com/pylons/pyramid/pull/183。
错误修复¶
当试图设置一个
__text__一个自定义谓词的属性,它实际上是一个类方法。参见https://github.com/pylons/pyramid/pull/217。根据要求访问或设置不推荐使用的响应属性(例如
response_content_type)现在,在访问时而不是在呈现时发出拒绝警告。
1.1a2(2011年6月22日)¶
漏洞修补¶
1.1A1通过不提供向后兼容的进口垫片来破坏Akhet
pyramid.paster.PyramidTemplate. 现在已经添加了一个,尽管当Akhet导入它时会发出一个弃用警告。如果在一次调用中提供了多个规范
config.add_translation_dirs,目录以错误的顺序插入到目录列表的开头:插入的顺序与提供的顺序相反。*specs列表(列表后面的项目在列表前面添加)。现在已修复。
向后不兼容¶
Pyramid路由器试图在密钥中设置一个值
environ['repoze.bfg.message']当它捕获到与视图相关的异常时,与为其编写的应用程序向后兼容repoze.bfg在错误处理期间。它是通过使用类似这样的代码来实现的:# "why" is an exception object try: msg = why[0] except: msg = '' environ['repoze.bfg.message'] = msg
价值的使用
environ['repoze.bfg.message']Pyramid1.0中的文档被弃用。我们的长期政策是在两个主要版本被否决后不删除功能,所以这个代码最初计划在Pyramid1.2中删除。然而,计算repoze.bfg.message值是至少一个在野外发现的bug的来源(https://github.com/pylons/pyramid/issues/199),并且没有一种既保持向后兼容性又修复bug的简单方法。因此,设置该值的代码在此版本中已被删除。依赖此值在环境中的存在的异常视图中的代码现在应该使用exception请求的属性(例如request.exception[0])检索消息而不是依赖request.environ['repoze.bfg.message'].
1.1A1(2011年6月20日)¶
文档¶
术语“模板”指“粘贴模板”和“渲染模板”(由渲染引擎创建的模板)。i、 长尾蛇、变色龙、金贾等)。”“粘贴模板”现在将被称为“脚手架”,而“渲染模板”的名称将保留为“模板”
这个
wiki(zodb+traversal)教程稍有更新。这个
wiki2(sqla+url-dispatch)教程稍有更新。制作
pyramid.interfaces.IAuthenticationPolicy和pyramid.interfaces.IAuthorizationPolicy公共接口,并在pyramid.authentication和pyramid.authorizationAPI文档。在中呈现每个公开接口的函数定义
pyramid.interfaces.将缺少的文档引用添加到
pyramid.config.Configurator.set_view_mapper并在名为“使用视图映射器”的Hooks章节中参考它。在“环境变量和
.ini“文件设置”一章,标题为“添加自定义设置”。添加了“多维数据集”的文档(例如
request.POST)作为接口API文档。在“url-dispatch”叙述章节中添加了一节,介绍了新的“静态”路由功能。
在文档的HTML呈现中添加了“Pyramid1.1中的新功能”。
为添加了API文档
pyramid.authentication.SessionAuthenticationPolicy.为添加了API文档
pyramid.httpexceptions.exception_response.在视图叙述章节中添加了“HTTP例外”部分,包括对
pyramid.httpexceptions.exception_response.
特征¶
添加对语言回退的支持:尝试为特定区域(如
en_GB)回到语言的翻译(即en)这使翻译行为与GNUgetText一致,并在使用C扩展时修复部分翻译的文本。新身份验证策略:
pyramid.authentication.SessionAuthenticationPolicy,它使用会话来存储凭据。访问
response的属性pyramid.request.Request对象(例如)request.response在视图中)现在生成一个新的pyramid.response.Response对象。此功能主要用于配置了渲染器的视图需要设置响应属性时:所有渲染器都将使用request.response作为响应对象返回到路由器。request.response也可以由不使用渲染器的视图中的代码使用,但是由生成的响应对象request.response当渲染器不在运行时必须返回(它不是“全局”响应)。整数和长整型传递为
elements到pyramid.url.resource_url或pyramid.request.Request.resource_url例如resource_url(context, request, 1, 2)(1和2是elements)现在将隐式转换为结果中的字符串。以前作为元素传递整数或长整型会导致类型错误。pyramid_alchemy粘贴模板现在使用query.get而不是query.filter_by更好地利用身份映射缓存。pyramid_alchemy粘贴模板现在有单元测试。补充
pyramid.i18n.make_localizerAPI(从get_localizer胆子)NewRequest事件订阅服务器引发的异常现在可以由异常视图捕获。
现在可以从异常视图中获取有关为何Pyramid引发禁止异常的信息。这个
ACLDenied返回的对象permits每种股票授权政策的方法 (pyramid.interfaces.IAuthorizationPolicy.permits)现在作为它的result属性。因此,如果您创建了一个禁止的异常视图,那么您可以看到请求中涉及的ace、acl、权限和主体,例如。context.result.permission,context.result.acl等等,在禁止异常视图的逻辑中。不要明确阻止
timeout从低于reissue_time当设置AuthTktAuthenticationPolicy(以前这样的配置会导致ValueError现在是允许的,尽管通常是胡说八道的)。允许无意义的配置使得代码更易于理解,并且需要更少的测试。名为
paster pviews加入。此命令打印给定路径的潜在匹配视图的摘要。有关详细信息,请参阅叙述性文档“视图配置”一章中标题为“显示给定URL的匹配视图”的部分。这个
add_route配置器的方法现在接受static参数。如果这个论点是True,在处理请求时,不会考虑将添加的路由进行匹配。相反,它只对通过route_url和route_path. 有关更多信息,请参阅URL调度叙述章节中标题为“静态路由”的部分。上下文的默认异常视图
pyramid.interfaces.IExceptionResponse现在默认注册。这意味着从中导入的任何异常响应类的实例pyramid.httpexceptions(如HTTPFound)现在可以从视图代码内引发;引发时,此异常视图将把异常呈现给响应。一个名为
pyramid.httpexceptions.exception_response是一个快捷方式,可用于使用HTTP整数状态代码创建HTTP异常响应对象。配置程序现在接受一个名为
exceptionresponse_view. 默认情况下,此参数由默认的异常视图函数填充,该函数将在作为异常引发响应时使用。什么时候?None为该值传递,将不注册响应的异常视图。经过None返回将HTTP异常引发到Pyramid1.0的行为(该异常将传播到中间件和WSGi服务器)。这个
pyramid.request.Request类现在有一个ResponseClass指向的接口pyramid.response.Response.这个
pyramid.response.Response类现在有一个RequestClass指向的接口pyramid.request.Request.现在可以从可调用的Pyramid视图返回任意对象,即使不使用渲染器,只要合适的适配器
pyramid.interfaces.IResponse通过使用pyramid.config.Configurator.add_response_adapter应用程序编程接口。请参阅文档“更改Pyramid处理视图响应的方式”的“Hook”一章中的部分。默认情况下,Pyramid路由器现在将调用
__call__返回wsgi响应时Webob响应对象的方法。这意味着,除其他外,conditional_responseWebOB响应对象的功能现在将正常工作。名为的新方法
pyramid.request.Request.is_response. 应使用此方法而不是pyramid.view.is_response函数,已弃用。
漏洞修补¶
允许URL调度中使用的URL模式标记指定自定义regex。例如,模式
/{{foo:\d+}}匹配手段/12345(匹配字典中的foo==12345)但不是/abc. 然而,模式标记中使用弯曲括号的自定义正则表达式不起作用。例如,/{{foo:\d{{4}}}}将无法匹配/1234和/{{foo:\d{{1,2}}}}将无法匹配/1或/11. 现在可以识别一个级别的内部波形括号,这样前面两个作为示例的模式现在可以工作了。另请参见https://github.com/Pylons/pyramid/issues/123。不要在AuthtktCookieHelper设置的cookie中发送端口号和域信息(请参阅https://github.com/pylons/pyramid/issues/131)。
pyramid.url.route_path(还有捷径pyramid.request.Request.route_url方法)现在在路径前面包含wsgi脚本的名称,如果它不是空的(请参见https://github.com/pylons/pyramid/issues/135)。pyramid.testing.DummyRequest现在有一个script_name属性(空字符串)。不要引用
:@&+$,符号在*elements传递给pyramid.url.route_url或pyramid.url.resource_url(参见https://github.com/Pylons/pyramid/pull/141).在由发出的重定向中包含脚本名称
pyramid.view.append_slash_notfound_view(参见https://github.com/Pylons/pyramid/issues/149).已注册的静态视图
config.add_static_view其中还包括permission关键字参数不能按预期工作,因为add_static_view也在内部注册了一家路由工厂。因为路由工厂是在内部注册的,所以Pyramid许可机制检查的上下文从来没有ACL。add_static_view不再向工厂注册路由,因此将使用默认根工厂。config.add_static_view现在传递它接收到的额外关键字参数config.add_route(调用add_static_view在逻辑上主要等同于添加类型的视图pyramid.static.static_view连接到带有子路径的路线上)。这样可以通过,例如,factory=到add_static_view使用自定义ACL保护特定静态视图。testing.DummyRequest使用错误的注册表(全局注册表)作为self.registry如果创建了虚拟请求 之前testing.setUp被处决 (testing.setUp将本地注册表推送到线程本地堆栈)。通过实施修复registry作为DummyRequest的属性,而不是急于指定属性。另请参见https://github.com/pylons/pyramid/issues/165当访问一个表示静态视图的URL,该静态视图解析为一个子目录时,
index.html那个子目录的服务不好。相反,重定向到/subdir将发布。这已经被修复,现在访问的子目录包含index.html在静态视图中,正确返回index.html。另请参见https://github.com/pylons/pyramid/issues/67。静态视图发出的重定向未考虑任何现有的
SCRIPT_NAME(例如,一个由URL映射组合设置的集合)。现在他们做到了。这个
pyramid.wsgi.wsgiapp2装饰师没有考虑SCRIPT_NAME在原始请求中。这个
pyramid.wsgi.wsgiapp2decorator只在它修饰通过遍历找到的视图时有效地工作;它忽略了PATH_INFO这是URL调度匹配视图的一部分。
废弃¶
已弃用对的所有分配
request.response_*属性(例如request.response_content_type = 'foo'现已弃用)。响应影响框架所考虑的可分配请求属性的分配和突变现在已被否决:response_content_type,response_headerlist,response_status,response_charset和response_cache_for. 用户应该使用通过访问创建的响应对象的适当API,而不是将它们分配给请求对象,以便稍后由呈现机制进行检测。request.response(例如代码request.response_content_type = 'abc'应改为request.response.content_type = 'abc')将视图相关参数传递给
pyramid.config.Configurator.add_route现已弃用。以前,允许使用一组view*传递给的参数add_route配置器的方法。这是一个速记,取代了对add_view. 例如,它是有效的(并且经常被推荐)::config.add_route('home', '/', view='mypackage.views.myview', view_renderer='some/renderer.pt')
经过
view*论据add_route现在已弃用,赞成通过将视图连接到预定义路由Configurator.add_view使用路线的route_name参数。因此,上述示例现在应拼写为:config.add_route('home', '/') config.add_view('mypackage.views.myview', route_name='home') renderer='some/renderer.pt')
这样做是为了减少在IRC中观察到的混乱,以及(最终)减少文档负担(另见https://github.com/pylons/pyramid/issues/164)。当任何与视图相关的参数传递给
Configurator.add_route.路过
environ字典到__call__“遍历器”的方法(例如,实现pyramid.interfaces.ITraverser例如pyramid.traversal.ResourceTreeTraverser)request参数现在导致发出一个拒绝警告。消费者代码应通过request对象。允许传递environ dict这一事实自年以来一直被文档弃用。repoze.bfg1.1,此功能将在未来版本中完全删除。以下(未记录的,类似字典的)方法
pyramid.request.Request对象已被弃用:__contains__,__delitem__,__getitem__,__iter__,__setitem__,get,has_key,items,iteritems,itervalues,keys,pop,popitem,setdefault,update和values. 使用这些方法中的任何一种都将导致发出弃用警告。这些方法是为了在repoze.bfg1.1(当前预期请求对象的代码预期BFG 1.0及之前版本中的environ对象)。在未来的版本中,这些方法将被完全删除。已弃用
pyramid.view.is_response有利于(新增)的功能pyramid.request.Request.is_response方法。确定一个对象是否真的是一个有效的响应对象,现在需要访问注册表,注册表只作为请求属性很容易获得。这个pyramid.view.is_response函数在被删除之前仍然有效,但现在在某些(非常罕见)情况下可能返回错误的答案。
行为改变¶
默认的Mako渲染器现在配置为转义表达式标记中的所有HTML。这有助于防止由于呈现用户未初始化的输入而导致的XSS攻击。要在用户模板中恢复此行为,他们需要通过“n”筛选器筛选表达式。例如,$myhtml n。参见https://github.com/pylons/pyramid/issues/193。
现在需要自定义请求工厂返回具有
response属性(或“reified”/“lazy”属性),如果它们是要在使用渲染器的视图中使用请求。这个response属性应为类的实例pyramid.response.Response.JSON和字符串呈现器工厂现在分配给
request.response.content_type而不是request.response_content_type.现在,每个内置呈现器工厂通过比较响应的内容类型与响应的默认内容类型来确定是否应更改响应的内容类型;如果内容类型是默认内容类型(通常
text/html,渲染器将内容类型(更改为application/json或text/plain分别用于JSON和字符串渲染器)。这个
pyramid.wsgi.wsgiapp2现在使用稍微不同的方法来计算如何“修复”SCRIPT_NAME和PATH_INFO对于下游应用程序。因此,这些值可能与下游应用程序的角度略有不同(例如,SCRIPT_NAME将永远不会有一个斜杠)。以前,
pyramid.request.Request继承自webob.request.Request并实施__getattr__,__setattr__和__delattr__它本身是为了超越“adhoc attr”webob行为,其中请求的属性存储在环境中。现在,pyramid.request.Request对象继承自(最近的)webob.request.BaseRequest而不是webob.request.Request提供相同的行为。pyramid.request.Request不再实现自己的__getattr__,__setattr__或__delattr__因此。pyramid.response.Response现在是 子类 属于webob.response.Response(为了直接执行pyramid.interfaces.IResponse接口。“异常响应”对象可从导入
pyramid.httpexceptions(例如)HTTPNotFound)不再只是为实际生活在webob.exc. 相反,我们在模块中定义了自己的异常类,该类镜像并模拟webob.exc异常响应对象几乎完全是。有关详细信息,请参阅名为“Pyramid使用自己的HTTP异常类”的“设计防御”文档部分。
向后不兼容¶
Pyramid不再支持python 2.4。运行Pyramid1.1+需要python 2.5或更高版本。
默认情况下,Pyramid路由器现在期望从视图可调用文件返回的响应对象实现
pyramid.interfaces.IResponse接口。与此接口的Pyramid1.0版本不同,现在实现IResponse的对象必须定义__call__接受的方法environ和start_response,返回app_iter除其他外,它是无可辩驳的。以前,可以返回任何具有三个WebOB的对象app_iter,headerlist和status属性作为响应,所以这是向后不兼容。通过将适配器注册为从现在从视图可调用文件返回的对象类型响应,可以恢复向后兼容性。请参阅文档“更改Pyramid处理视图响应的方式”的“Hook”一章中的部分。这个
pyramid.interfaces.IResponse现在界面更广泛了。以前它只定义app_iter,status和headerlist;现在它基本上是为了直接反映webob.ResponseAPI,它有许多方法和属性。这个
pyramid.httpexceptions类命名HTTPFound,HTTPMultipleChoices,HTTPMovedPermanently,HTTPSeeOther,HTTPUseProxy和HTTPTemporaryRedirect现在接受location作为他们的第一个位置论点而不是detail. 这意味着你可以做到,例如return pyramid.httpexceptions.HTTPFound('http://foo')而不是return pyramid.httpexceptions.HTTPFound(location='http//foo')(后者当然会继续工作)。
依赖关系¶
Pyramid现在依赖于webob>=1.0.2,因为测试依赖于该版本中的错误修复:“修复对缺少的wsgi环境的处理
SCRIPT_NAME“。(请注意,实际上,每个人都应该使用1.0.4或更好的版本,因为Webob1.0.2和1.0.3是有效的brownbag版本。)
1.0(2011年1月30日)¶
文档¶
修复了zodb wiki教程中的错误(缺少对
docutils在“模型”中,请在setup.py)删除的API文档
pyramid.testingAPI命名registerDummySecurityPolicy,registerResources,registerModels,registerEventListener,registerTemplateRenderer,registerDummyRenderer,registerView,registerUtility,registerAdapter,registerSubscriber,registerRoute和registerSettings.移动了“使用ZODB With ZEO”和“Using”寄存目录“金字塔内部”教程出了核心文档并进入金字塔教程网站(https://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/).
在URL发送章节中更改了“请求后清理”部分以供使用
request.add_finished_callback而不是用__del__进入WSGi环境。删除重复的
add_routeURL调度叙述章节中的API文档。删除中重复的API和叙述性文档
pyramid.view.view_config指向的API文档pyramid.config.add_view文档和叙述章节文档。删除了文档叙述部分重复的一些API文档
删除了sqlachemy+url dispatch wiki教程中的“总体身份验证流”,因为存在打印空间问题(移动到Pyramid教程网站)。
漏洞修补¶
已弃用的-since-bfg-1.2 API来自
pyramid.testing现在正确地发出拒绝警告。补充
egg:repoze.retry#retryzodb模板中的wsgi管道中间件(重试在正常操作中发生的zodb冲突错误)。已删除的重复实现
is_response. 存在两个相互竞争的实现:一个在pyramid.config其中一个pyramid.view. 现在定义在pyramid.view由内部使用pyramid.config并继续作为API进行广告宣传。
1.0b3(2011年1月28日)¶
漏洞修补¶
在粘贴模板/教程模板中使用©;而不是版权符号,这样有利于剪切粘贴并保存为非UTF8格式的用户。
pyramid.view.append_slash_notfound_view现在保留跨重定向的get查询参数。
文档¶
加强相关文件
set_default_permission:明确指出默认权限还保护异常视图。粘贴模板和教程现在在HTML模板中使用空格而不是制表符。
1.0B2(2011年1月24日)¶
漏洞修补¶
这个
production.ini由所有粘贴器模板生成的日志记录级别现在都是有效的警告级别,这可以防止诸如SQLAlchemy语句日志记录和其他不适当的输出。这个
production.ini的pyramid_routesalchemy和pyramid_alchemy粘贴模板没有sqlalchemy记录器部分,防止paster serve production.ini从工作中。这个
pyramid_routesalchemy和pyramid_alchemy粘贴模板使用{{{{package}}}}变量应该使用{{{{project}}}}变量,导致使用大写字母创建应用程序,例如paster create -t pyramid_routesalchemy Dibbus未能在以下情况下启动paster serve development.ini被用来对抗结果。看到了吗https://github.com/Pylons/pyramid/issues/107这个
render_view方法pyramid.renderers.RendererHelper将不正确的值传递给的呈现器renderer_info. 它现在传递一个RendererHelper而不是字典,这与其他用法是一致的。看到了吗https://github.com/Pylons/pyramid/issues/106一个存在于
pyramid.authentication.AuthTktCookieHelper它将中断AuthtktAuthenticationPolicy在配置为重新颁发其令牌时的任何使用。 (reissue_time<timeout/max_age)症状:ValueError: ('Invalid token %r', ''). 看到了吗https://github.com/Pylons/pyramid/issues/108。
1.0b1(2011年1月21日)¶
特征¶
AuthtktAuthenticationPolicy现在接受
tokens参数通过pyramid.security.remember. 值必须是字符串序列。令牌被放入auth-tkt“tokens”字段,并返回到auth-tkt cookie中。添加
wild_domainauthtktauthenticationpolicy的参数,默认为True. 如果设置为False,将关闭使用通配符域设置cookie的策略功能。添加
MANIFEST.in文件到每个粘贴模板。看到了吗https://github.com/Pylons/pyramid/issues/95
漏洞修补¶
testing.setUp现在添加一个settings属性设置为注册表(当传递没有任何设置的注册表时,以及当它创建注册表时)。这个
testing.setUp函数现在采用settings参数,应该是字典。其值随后将在返回的config对象ASconfig.registry.settings.
文档¶
在文档的HTML呈现中添加了“Pyramid1.0中的新功能”一章。
合并了凯斯曼大师的叙事编辑分支,许多措辞的修正和扩展。
修复显示的已弃用示例
chameleon_zpt测试叙述章节中的API调用。添加了“通过向配置器添加方法”
add_directive“高级配置叙述章节。添加文档
add_finished_callback,add_response_callback,route_path,route_url和static_url方法到pyramid.request.RequestAPI文档。将有关在Mako模板中使用i18n的(最少)文档添加到“国际化和本地化”叙述章节。
把“表单”章节的内容移回“视图”章节;我想不出一个更好的地方来放置它。
稍微改进的接口文档
IAuthorizationPolicy.在URL调度章节中,至少解释URL调度替换标记中自定义正则表达式的用法。
废弃¶
使用
pyramid.view.bfg_view别名pyramid.view.view_config(向后兼容垫片)现在发出警告。
向后不兼容¶
使用
testing.setUp现在注册一个isettings实用程序作为副作用。一些测试代码在testing.setUpvia queryadapter将期望返回值为None. 需要更改此代码。当A
pyramid.exceptions.Forbidden出现错误,其状态代码为403 Forbidden. 以前是这样的401 Unauthorized,以便向后兼容repoze.bfg. 此更改将给使用Pyramid的用户带来问题repoze.who,截取401 Unauthorized默认情况下,但允许403 Forbidden通过。这些部署需要配置repoze.who对…也有反应403 Forbidden.的默认值
cookie_on_exception参数到pyramid.session.UnencryptedCookieSessionFactory现在是True. 这意味着,当视图代码导致引发异常,并且会话发生变化时,将在响应中发送一个cookie。以前它的默认值是False.
贴纸模板¶
这个
pyramid_zodb,pyramid_routesalchemy和pyramid_alchemy当配置repoze.tm2中的事务管理器development.ini. 这可以防止当响应状态代码在400或500范围内时提交事务。另请参见https://repozetm2.readthedocs.io/en/latest/index.html使用-a-承诺-否决。
1.0A10(2011年1月18日)¶
漏洞修补¶
URL调度现在可以正确处理
.*或*在括号内使用时出现在regex匹配中。解决问题90。
向后不兼容¶
这个
add_handler配置器的方法已从金字塔核心中删除。处理程序现在是pyramid_handlers包,可以从PyPI下载。该软件包的文档可通过https://docs.pylonsproject.org/projects/pyramid_handlers/en/latest/,它描述了如何将配置语句添加到main阻止重新加入此方法。您还需要添加install_requires依赖于pyramid_handlers对你setup.py文件。这个
load_zcml配置器的方法已从金字塔核心中删除。加载zcml现在是pyramid_zcml包,可以从PyPI下载。该软件包的文档可通过https://docs.pylonsproject.org/projects/pyramid zcml/en/latest/,它描述了如何将配置语句添加到main阻止重新加入此方法。您还需要添加install_requires依赖于pyramid_zcml对你setup.py文件。这个
pyramid.includes子包已被删除。使用的zcml文件包括包pyramid.includes(例如)<include package="pyramid.includes"/>)现在必须包括pyramid_zcml改为打包(例如<include package="pyramid_zcml"/>)这个
pyramid.view.action装饰器已从Pyramid核心移除。处理程序现在是pyramid_handlers包。现在应该从pyramid_handlers例如from pyramid_handlers import action.这个
handlerZCML指令已被删除。它现在是pyramid_handlers包。这个
pylons_minimal,pylons_basic和pylons_sqla粘贴模板已删除。使用pyramid_sqla(可从PYPI获得)作为桥塔式发展的通用替代品。这个
make_app函数已从中删除pyramid.router模块。它继续生活在pyramid_zcml包。这就离开了pyramid.router没有任何API函数的模块。这个
configure_zcml部署设置中的设置(在**settings传到Pyramidmain功能)不再有任何意义。
特征¶
pyramid.testing.setUp和pyramid.testing.tearDown没有预先准备好。它们现在是测试配置的规范设置和拆卸API,取代了配置器的“直接”创建。这是一个设计用来提供一个外观的变更,它可以防止将来的配置程序被拒绝。添加
charset属性到pyramid.testing.DummyRequest(无条件地UTF-8)添加
add_directive方法到配置器,它允许框架扩展器向配置器添加方法(ala zcml指令)。什么时候?
Configurator.include通过了 模块 作为参数,它默认为尝试查找和使用名为includeme在那个模块中。这样就可以使用config.include('some.module')而不是config.include('some.module.somefunc')只要包含函数在some.module被命名includeme.这个
bfg2pyramid脚本现在转换zcml include标记repoze.bfg.includes作为值的包属性pyramid_zcml. 例如,<include package="repoze.bfg.includes">将转换为<include package="pyramid_zcml">.
贴纸模板¶
所有贴纸模板现在都使用
pyramid.testing.setUp和pyramid.testing.tearDown而不是在其内部“手动”创建配置程序tests.py模块,根据上述特征中的决定。这个
starter_zcml粘贴模板已移动到pyramid_zcml包。
文档¶
wiki和wiki2教程现在使用
pyramid.testing.setUp和pyramid.testing.tearDown而不是根据上述特性中的决定“手工”创建配置程序。“测试”叙述章节现在解释了
pyramid.testing.setUp和pyramid.testing.tearDown而不是配置器的创建和Configurator.begin()和Configurator.end().文档
request.override_renderer属性,位于名为“在运行时覆盖渲染器”的部分的“渲染器”一章中。“声明性配置”叙述章节已被删除(它被移到
pyramid_zcml包装)。在叙述章节中对zcml的大多数引用都被删除或重定向到
pyramid_zcml位置。
废弃¶
添加了与导入以下API函数相关的拒绝警告:
pyramid.traversal.find_model,pyramid.traversal.model_path,pyramid.traversal.model_path_tuple,pyramid.url.model_url. 拒绝警告发出的指令指示开发人员将这些方法拼写改为resource当量。这是在1.0A7中将“模型”重命名为“资源”的大量概念的结果。
1.0A9(2011年1月8日)¶
漏洞修补¶
这个
proutes命令试图解析要打印的视图,但由于遇到异常根工厂而导致异常。如果无法解析视图,它现在只打印<unknown>.这个 self 参数包含在
ISession接口签名,导致pyramid_beaker测试失败。雷丁
pyramid.traversal.model_path_tuple作为别名pyramid.traversal.resource_path_tuple为了向后兼容。
特征¶
添加新的API
pyramid.url.current_route_url,它根据“当前”路由(如果有)及其matchdict值计算URL。config.add_view现在接受decorator关键字参数,一个可调用项,它将在将视图可调用项添加到注册表之前修饰该视图。如果处理程序类提供
__action_decorator__属性(通常是ClassMethod或StaticMethod),将其用作该处理程序的每个视图注册的修饰器。这个
pyramid.interfaces.IAuthenticationPolicy接口现在指定unauthenticated_userid方法。此方法支持使用不支持对象缓存且希望创建“用户对象”作为请求属性的持久存储的用户所需的重要优化。新的API已添加到
pyramid.security模块命名unauthenticated_userid. 此API函数调用unauthenticated_userid有效安全策略的方法。安
unauthenticated_userid方法已添加到由返回的虚拟身份验证策略pyramid.config.Configurator.testing_securitypolicy. 它返回与虚拟身份验证策略的authenticated_userid方法。类
pyramid.authentication.AuthTktCookieHelper现在是一个API。此类可供第三方身份验证策略开发人员用于帮助进行身份验证cookie设置的机制。配置器的新构造函数参数:
default_view_mapper. 用于创建具有备用视图调用约定的系统。视图映射器允许用作视图可调用文件的对象具有任意参数列表和任意结果。对象作为default_view_mapper应该实现pyramid.interfaces.IViewMapperFactory接口。添加一个
set_view_mapper配置器的API。与传球结果相同default_view_mapper到配置器构造函数。config.add_view现在接受mapper关键字参数,应为None,表示python点式名称的字符串,或表示IViewMapperFactory. 此功能对“平民”不有用,只对扩展编写器有用。允许在请求时通过名为的请求属性重写视图注册期间提供的静态呈现器
override_renderer,它应该是以前注册的渲染器的名称。使用现有渲染视图提供“全向呈现”RPC很有用。实例
pyramid.testing.DummyRequest现在有一个session对象,它主要是一个字典,但也实现了Flash和CSRF的其他会话API方法。
向后不兼容¶
自从
pyramid.interfaces.IAuthenticationPolicy接口现在指定策略实现必须实现unauthenticated_userid方法,所有第三方自定义身份验证策略现在都必须实现此方法。但是,只有当名为pyramid.security.unauthenticated_userid是被调用的,所以如果您不调用它,您将不会注意到任何问题。pyramid.interfaces.ISession.get_csrf_token现在要求实现返回 new 如果会话中不存在令牌(以前它将不返回)。内部会话实现已更改。
文档¶
(弱)“将CMF应用程序转换为Pyramid”教程已从教程部分中删除。它被移到
pyramid_tutorialsGithub存储库。“资源定位和视图查找”一章已被Rob Miller的“关于遍历的许多麻烦”的变体(最初发表于https://web.archive.org/web/20150321110754/http://blog.non-quietarity.org/2010/much-ado关于遍历/)。
许多小的措辞调整和重构(合并了凯西邓肯的文档复刻,他正在其中进行一般性编辑)。
在Hooks叙述章节中添加了对新视图映射器功能的(弱)描述。
将视图章节拆分为2:视图可调用文件和视图配置。
在视图可调用文件之后,但在视图配置之前,重新排序渲染器和模板章节。
将会话对象、跨站点请求伪造和FlashMessaging章节合并为单个会话章节。
wiki和wiki2教程现在有了更好的CSS和图形。
内构件¶
“视图派生”代码现在被分解成一组类,而不是大量独立的函数(视图映射器重构的副作用)。
这个
pyramid.renderer.RendererHelper类已经成长为render_view方法,由默认视图映射器使用(视图映射器重构的副作用)。对象作为
renderer“视图派生器”现在是pyramid.renderers.RendererHelper而不是字典(视图映射器重构的副作用)。在中用作“页面模板”的类
pyramid.chameleon_text删除,而不是使用变色龙内置版本。在注册表中注册的视图可调用包装现在包含
__original_view__引用原始视图可调用(或类)的属性。以前命名的所有内部身份验证策略实现的(非API)方法
_get_userid现在命名为unauthenticated_userid,升级为API方法。如果要重写此方法,现在需要将其重写为unauthenticated_userid相反。删除config.py名为“映射”视图的(非api)函数。
1.0A8(2010年12月27日)¶
漏洞修补¶
名字
registry在中不可用paster pshellIPython的环境。
特征¶
如果资源实现
__resource_url__方法,它将作为调用pyramid.url.resource_url函数生成URL,覆盖默认逻辑。请参阅参考资料叙述章节中新的“生成资源的URL”部分。添加了flash messaging,如“flash messaging”叙述性文档一章所述。
增加了CSRF令牌生成,如标题为“防止跨站点请求伪造攻击”的叙述章节所述。
防止误解
view和view_permission如果视图相关参数存在但不存在,则通过在配置期间引发异常来添加路由工作的参数view参数已传递。添加
paster proute显示路由表摘要的命令。请参阅标题为“显示所有应用程序路径”的“URL发送”章节中的叙述性文档部分。
贴纸模板¶
这个
pyramid_zodb粘贴模板不再使用zcml。相反,它是基于扫描。
文档¶
在资源叙述章节中添加了“生成资源的URL”部分(包括有关使用
__resource_url__)在“资源叙述”一章中增加了“生成资源路径”一节。
在“资源叙述”一章中增加了“按路径查找资源”一节。
在资源叙述章节中增加了“获取资源的血统”。
在资源叙述章节中增加了“确定资源是否属于另一个资源的谱系”。
在资源叙述章节中增加了“查找根资源”。
在参考资料叙述章节中增加了“在沿袭中查找具有类或接口的资源”。
增加了“flash messaging”叙述性文档章节。
增加了一个标题为“防止跨站点请求伪造攻击”的叙述性章节。
根据对“zodb+遍历wiki教程”的更改
pyramid_zodb粘贴模板。增加了“高级配置”叙述章节,其中记录了如何处理配置冲突、两阶段配置,
include和commit.修复的API文档呈现
pyramid.view.static添加“Pyramid提供了一种以上的方法来完成它”来设计防御文档。
更改了“Static Assets”叙述章节:澄清
name表示一个前缀,除非它是一个URL,为URL调度添加了一个根相对静态视图回退的示例,添加了一个创建返回文件正文的简单视图的示例。将Hook章节中的zcml用法移到声明性配置章节。
将“Static Assets”一章合并为“资产”一章。
在标题为“显示所有应用程序路由”(用于
paster proutes命令)。
1.0A7(2010年12月20日)¶
术语更改¶
以前被称为“模型”的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和starter_zcml粘贴模板现在有一个resources.py模块而不是models.py模块。
各种API的位置参数名称已从
model到resource.
在所有情况下,向后兼容性垫片都保持在原位。他们将“永远”继续工作。
以前被称为“资源”的Pyramid概念现在被称为“资产”。因此:
(非API)模块以前称为
pyramid.resource现在被称为pyramid.asset.以前提到“资源规格”的所有文档现在都提到“资产规格”。
进行了以下API更改:
pyramid.config.Configurator.absolute_resource_spec -> pyramid.config.Configurator.absolute_asset_spec pyramid.config.Configurator.override_resource -> pyramid.config.Configurator.override_asset
zcml指令以前称为
resource现在被称为asset.以前称为
BFG_RELOAD_RESOURCES(EnVaR)或reload_resources(配置文件)现在分别称为PYRAMID_RELOAD_ASSETS和reload_assets.
在所有情况下,向后兼容性垫片都保持在原位。他们将“永远”继续工作。
漏洞修补¶
通过
nosetests直接命令(而不是间接通过python setup.py nosetests)扫描过程中遇到配置冲突时,冲突异常现在显示导致冲突的装饰器信息。
特征¶
补充
debug_routematch记录匹配路由(包括matchdict和谓词)的配置设置。名字
registry现在可在pshell默认环境。它是应用程序注册表对象。
环境¶
所有环境变量的前缀
BFG_现在前缀为PYRAMID_(例如)BFG_DEBUG_NOTFOUND现在是PYRAMID_DEBUG_NOTFOUND)
文档¶
在URLDISPATCH叙述性文档章节中添加了“调试路由匹配”部分。
添加了对的引用
PYRAMID_DEBUG_ROUTEMATCH恩瓦尔和debug_routematch“环境叙述文档”一章中的配置文件设置。略改“项目”章节,扩大对
paster pshell.将Jython用户引导至Mako,而不是“安装”叙述章节中的jinja2。
许多变化支持术语更名“模型”为“资源”,“资源”为“资产”。
添加了一个示例
WebTest功能测试到测试叙述章节。按流行需求重新排列章节顺序(首先是URL调度,然后是遍历)。将混合动力章节放在视图章节之后。
将“渲染者”从叙事文档的“视图”一章中分离出来,作为自己的一章。
贴纸模板¶
补充
debug_routematch = false所有贴纸模板。
依赖关系¶
取决于金星>=0.5(用于扫描冲突异常装饰)。
1.0A6(2010年12月15日)¶
漏洞修补¶
1.0A5在
pyramid.config.Configurator.scan使用时没有package论证(例如)config.scan()而不是config.scan('packagename'). 其症状是:在控制台上打印了大量关于导入不推荐使用的Pyramid函数和类以及不检测带有view_config装饰工。这个问题已经解决了。测试现在在Windows上进行(没有发现错误,但测试套件中的一些测试假定文件名中存在Unix路径段)。
文档¶
如果您按照它的要求,zodb+traversal wiki教程将指示您运行一个测试,该测试将失败,因为由
pyramid_zodb教程使用了一个可以调用的单参数视图,但是示例代码中的测试使用了一个双参数调用。更新了所有步骤的zodb+traversal tutorial setup.py,以匹配
pyramid_zodb.修复对的引用
repoze.bfg.traversalwrapper在“模型”一章中(指向pyramid_traversalwrapper相反)。
1.0A5(2010年12月14日)¶
特征¶
添加
handlerZCML指令。此指令的作用与pyramid.configuration.add_handler.名为
pyramid.config加入。它包含了老年人的职责pyramid.configuration模块。新的
pyramid.config.Configurator` class has API methods that the older `` pyramid.configuration.configurator``类没有: ``with_context(一种分类方法)include,action和commit. 这些方法的存在是为了强制应用程序扩展的目的。这个
pyramid.testing.setUp函数现在接受autocommit关键字参数,默认为True. 如果通过False,返回的配置对象setUp将是一个非自动提交配置对象。将日志配置添加到所有粘贴程序模板。
pyramid_alchemy,pyramid_routesalchemy和pylons_sqlaPaster模板现在在各自的模板中使用惯用的SQLAlchemy配置.ini文件和python代码。pyramid.testing.DummyRequest现在有一个类变量,query_string,默认为空字符串。通过捕获notimplementederor并从django.utils导入simplejson,添加对gae上JSON的支持。
Mako渲染器现在接受
mako.module_directory.新建布尔Mako设置变量
mako.strict_undefined. 见 Mako Context Variables 因为它的意义。
依赖关系¶
取决于Mako 0.3.6+(我们现在需要
strict_undefined特征)。
漏洞修补¶
从中创建配置程序时,
paster pshell会话,要求您通过package尽管如此,参数package实际上不是必需的。如果你没有通过package,您将收到一个错误,类似KeyError: '__name__'源于pyramid.path.caller_module功能。现在已经修复了。这个
pyramid_routesalchemy粘贴模板的单元测试失败 (AssertionError: 'SomeProject' != 'someproject')这是固定的。使默认渲染器工作(渲染器工厂没有名称注册,除非视图指定特定的渲染器,否则对于每个视图都是活动的)。
Mako渲染器没有正确地旋转
mako.imports,mako.default_filters和mako.imports设置到列表中。Mako渲染器没有正确转换
mako.error_handler从点状名称设置为可调用名称。
文档¶
从https://github.com/caseman/pyramid(直到并包括“模型”叙述章节)中合并了叙述性文档章节的许多措辞、可读性和正确性更改。
文档的“示例应用程序”部分更改为注意从repoze.bfg原始包中移植的cluegun、shootout和virginia示例应用程序的存在。
sqlacalchemy+urldispatch教程更新以集成对
pyramid_routesalchemy模板。添加
pyramid.interfaces.ITemplateRenderer接口到接口API章节implementation()方法,获取变色龙宏时需要使用)。在项目叙述文档章节中添加“修改包结构”部分(解释如何将模块转换为包)。
为新的
handlerzcml部分中的zcml指令。
废弃¶
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相反。
1.0A4(2010年11月21日)¶
特征¶
URL调度现在允许替换标记位于模式中的任何位置,而不是紧跟
/.URL调度现在使用表单
{{marker}}在路线图中表示替换标记,而不是:marker. 为了向后兼容,仍然接受旧的冒号样式标记语法。新格式允许使用该标记位置的正则表达式,而不是默认的[^/]+,例如{{marker:\d+}}现在有效,要求标记为数字。添加
pyramid.url.route_pathAPI,允许人们生成相对的URL。打电话route_path和打电话一样吗pyramid.url.route_url有了参数_app_url等于空字符串。添加
pyramid.request.Request.route_path应用程序编程接口。这是调用pyramid.url.route_url.让测试套件通过Jython(需要PasteScript主干,大概是1.7.4)。
让测试套件通过Pypy(变色龙不工作)。
周围的应用程序配置
config.begin()和config.end()不再需要。所有的粘贴模板都已更改为不再调用这些函数。将配置程序固定为不转换
ImportError到ConfigurationError如果失败的导入与解析点名称(如视图点名称)时通过点名称请求的导入无关。
文档¶
sqlacalchemy+urldispatch和zodb+遍历教程已更新为不调用
config.begin()或config.end().
漏洞修补¶
将弃用警告添加到导入
pyramid.chameleon_text和pyramid.chameleon_zpt属于get_renderer,get_template,render_template和render_template_to_response.为导入添加弃用警告
pyramid.zcml.zcml_configure和pyramid.zcml.file_configure.这个
pyramid_alchemy粘贴模板有一个打字错误,导致导入无法工作。在调用时修复明显的故障
pyramid.traversal.find_model(root, path)或pyramid.traversal.traverse(path)什么时候?path是(错误地)Unicode对象。用户应该将这些API作为字符串对象传递,而不是unicode对象。然而,实际上,用户确实通过了Unicode。因为传递的字符串必须是ASCII可编码的,现在,如果它们传递一个Unicode对象,它的数据将被热切地转换为一个ASCII字符串,而不是为了方便用户而被传递给下游代码,并防止出现令人费解的二阶故障(所有故障都将发生在pyramid.traversal.traverse而不是后来打电话的结果。traversal_path)
向后不兼容¶
这个
pyramid.testing.zcml_configureAPI已被删除。自repoze.bfg 1.2a1以来,它被广告称为已被删除,但实际上并没有。
废弃¶
这个
pyramid.settings.get_settingsAPI现已弃用。使用pyramid.threadlocals.get_current_registry().settings或者使用settings请求中可用的注册表属性 (request.registry.settings)
文档¶
远离的
zodbsessions教程章节。它仍然很有用,但是我们现在有了一个与之竞争的会话工厂抽象,并且在两种方法上维护文档会分散注意力。
内部的¶
在内部集成测试中将twill替换为webtest(避免twill生成拒绝警告)。
1.0A3(2010年11月16日)¶
特征¶
为添加了Mako TemplateLookup设置
mako.error_handler,mako.default_filters和mako.imports.规范化的所有粘贴模板:现在每个模板都使用名称
main为了表示返回wsgi应用程序的函数,现在每个应用程序都使用WebError,现在每个应用程序都有大致相同的development.ini样式。添加了类变量
matchdict和matched_route到pyramid.request.Request. 每个设置为None.新API方法:
pyramid.settings.asbool.的新API方法
pyramid.request.Request:model_url,route_url和static_url. 这些是它们各自在pyramid.url.这个
settings对象,以前只有在request.settings.get_settings已调用的现在可用为registry.settings(例如)request.registry.settings在视图代码中)。
漏洞修补¶
塔架贴纸模板错误地使用了
{{squiggly}}作为提供给的模式的路由语法add_route. 不支持此样式的路由。它们被替换为:colon设计路线图案。挂架粘贴模板使用了相同的字符串 (
your_app_secret_string)session.secret在生成的development.ini. 如果在使用其中一个模板来生成生产应用程序的项目中保持不变,则这是一个安全风险。它现在使用随机生成的字符串。
文档¶
zodb+遍历wiki (
wiki)由于更改,教程已更新pyramid_zodb粘贴模板。sqlacalchemy+urldispach维基 (
wiki2)由于更改,教程已更新pyramid_routesalchemy粘贴模板。记录的
matchdict和matched_route请求API文档中请求对象的属性。
废弃¶
获得
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)
行为差异¶
内部:zcml指令不再调用get_current_registry(),如果存在
registryzcml上下文上的属性(取消使用threadlocals)。内部:变色龙模板渲染器现在接受两个参数:
path和lookup.Lookup将是一个查找类的实例,该类为调试、重新加载和转换提供(后期绑定)参数。使用(非API)函数的任何第三方呈现器pyramid.renderers.template_renderer_factory需要调整它们的实现以遵守新的回调参数列表。这一变化是为了消除对线程局部变量的不当使用。
1.0A2(2010年11月9日)¶
文档¶
按接口对事件的所有引用(例如
pyramid.interfaces.INewRequest)已更改为参考其具体等级(例如pyramid.events.NewRequest)在有关订阅的文档中。应用程序对Pyramid的所有引用都已从mod-pyramid`更改为app-`pyramid。自定义角色设置已添加到
docs/conf.py考虑到这一点。(内部)
1.0A1(2010年11月5日)¶
特征(从BFG 1.3开始的增量)¶
Mako模板渲染器支持模板查找和Mako模板内的资源规范格式。必须在Pyramid中使用绝对文件名才能避免此查找过程。
添加
pyramid.httpexceptions模块,它是webob.exc模块。直接内置支持Mako模板语言。
存在新的配置器方法:
add_handler. 这个方法添加了一个挂架样式的“视图处理程序”(在挂架1.0中,这种东西曾被称为“控制器”)。配置器的新参数:
session_factory.配置器上的新方法:
set_session_factory使用
request.session现在,如果会话工厂已配置,则返回(类似字典的)会话对象。请求现在具有一个新属性:
tmpl_context为了塔架用户的利益。以前称为
pyramid.view.bfg_view现在最正式的是pyramid.view.view_config在文档和粘贴模板中。进口pyramid.view.bfg_view然而,将继续“永远”地工作。中的新API方法
pyramid.session:signed_serialize和signed_deserialize.新接口:
pyramid.interfaces.IRendererInfo. 此类型的对象将传递给渲染器工厂构造函数(请参见“向后不兼容”)。新事件类型:
pyramid.interfaces.IBeforeRender. 在调用渲染器之前(但在应用程序级渲染器全局工厂通过pyramid.configurator.configuration.set_renderer_globals_factory如果有的话,已经注入了自己的密钥)。应用程序现在可以订阅IBeforeRender事件类型,以便在将渲染器全局数据集传递给渲染器之前对其进行内省和修改。事件对象iself有一个类似字典的接口,可以用于此目的。例如::from repoze.events import subscriber from pyramid.interfaces import IRendererGlobalsEvent @subscriber(IRendererGlobalsEvent) def add_global(event): event['mykey'] = 'foo'
如果订阅服务器尝试添加已存在于渲染器全局字典中的键,则
KeyError提高了。这一限制是由于订户不能相对订购。所有订阅服务器和应用程序级全局工厂添加到渲染器全局字典的键集必须是唯一的。新类:
pyramid.response.Response. 这是一个纯粹的表面webob.Response(旧代码不需要更改就可以使用这个外观,它的存在主要是为了虚荣和文档生成的目的)。所有现有的粘贴模板(除了
zodb)现在使用“命令式”配置 (starter,routesalchemy,alchemy)名为
pyramid_starter_zcml存在,它使用声明性配置。
文件(来自BFG 1.3的增量)¶
增加了一个
pyramid.httpexceptionsAPI文档章节。增加了一个
pyramid.sessionAPI文档章节。增加了一个
Session Objects叙述性文件章节。为添加了API章节
pyramid.personality模块。为添加了API章节
pyramid.response模块。先前提到的所有文件
webob.Response现在使用pyramid.response.Response相反。对文档进行了大修,以使用命令式配置,将声明性配置(ZCML)解释移动到单独的叙述章节中。
declarative.rst.zodb wiki教程已更新,以考虑对
pyramid_zodb粘贴模板。SQL wiki教程已更新,以考虑对
pyramid_routesalchemy粘贴模板。
向后不兼容(与BFG 1.3)¶
不再有
IDebugLogger注册为名称为的命名实用程序repoze.bfg.debug.以前有个名字的记录器
repoze.bfg.debug现在有了名字pyramid.debug.已弃用的API
pyramid.testing.registerViewPermission已删除。已弃用的名为
pyramid.testing.registerRoutesMapper已删除。已弃用的名为
pyramid.request.get_request被移除。已弃用的名为
pyramid.security.Unauthorized被移除。已弃用的名为
pyramid.view.view_execution_permitted被移除。已弃用的名为
pyramid.view.NotFound被移除。这个
bfgshellPaster命令现在命名为pshell.所有内置金星装饰师的金星“类别”(例如
subscriberandview_config/bfg_view现在pyramid而不是bfg.pyramid.renderers.rendered_response功能已删除;使用render_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价值观authtktauthenticationpolicyzcml现在默认为auth_tkt(过去它默认为repoze.bfg.auth_tkt)默认值
cookie_name价值观pyramid.authentication.AuthTktAuthenticationPolicy构造函数现在默认为auth_tkt(过去它默认为repoze.bfg.auth_tkt)这个
request_type论据viewZCML指令pyramid.configuration.Configurator.add_view方法,或pyramid.view.view_config装饰工bfg_view)不再允许成为字符串之一GET,HEAD,PUT,POST或DELETE,现在必须始终是接口。接受方法字符串为request_type是为repoze.bfg 1.0应用程序提供服务的向后兼容性策略。使用request_method参数来指定一个视图一个字符串请求方法谓词。
repoze.bfg 更改历史记录(Pyramid的前一个名称)¶
1.3b1(2010年10月25日)¶
特征¶
这个
paster模板命名bfg_routesalchemy已更新为使用SQLAlchemy声明性语法。感谢Ergo ^。
漏洞修补¶
当找不到呈现器工厂时,如果呈现器名称不是字符串,则会引发错误消息。
文档¶
“bfgwiki2”(sqlacalchemy+url-dispatch)教程已稍微更新。特别是,源包不再尝试使用私有索引,推荐的Python版本现在是2.6。它还进行了更新,以考虑到
bfg_routesalchemy用于设置环境的模板。“bfgwiki”(zodb+traversal)教程已稍微更新。特别是,源包不再尝试使用私有索引,推荐的Python版本现在是2.6。
1.3A15(2010年9月30日)¶
特征¶
这个
repoze.bfg.traversal.traversal_pathAPI现在急切地尝试对Unicode进行编码path在尝试拆分和解码其段之前转换为ASCII。这是为了方便,有效地允许(存储为-unicode-in-a-database,或从-a-request-parameter检索为-as-unicode-from-a-request-parameter)将unicode路径传递给find_model最终在内部使用traversal_path在发动机罩下工作。在1.2及之前版本中,如果path是unicode,unicode在斜杠上被拆分,得到的每个段值都是unicode。不适当的呼叫decode()生成的Unicode路径段的方法可能导致UnicodeDecodeError即使路径的Unicode表示不包含“高阶”字符(实际上它执行了“双重解码”),也会发生这种情况。在我们尝试解码和拆分之前,通过将unicode路径参数转换为ascii,真正的错误将发生在一个更明显的地方,同时允许我们处理(为了方便)完全由ascii兼容字符构成的unicode表示。
1.3A14(2010年9月14日)¶
漏洞修补¶
如果通过旧版注册了异常视图
set_notfound_view或set_forbidden_viewAPI,发送到视图的上下文不正确(可能是None不适当)。
特征¶
与Webob 1.0兼容。
要求¶
现在需要Webob>=1.0。
向后不兼容¶
由于Webob 1.0引入了更改,因此
repoze.bfg.request.make_request_ascii事件订阅服务器不再工作,因此它已被删除。此订阅服务器用于部署,以便在bfg 0.7.0之前编写的代码可以不变地运行。此时,需要重写此类代码,以期望Unicode来自request.GET,request.POST和request.params否则需要更换才能使用request.str_POST,request.str_GET和/或request.str_params而不是相同的非``str``版本,同一API的非``str``版本现在总是执行Unicode解码。
勘误表¶
先前的changelog条目断言
INewResponse如果响应“无效”(如果视图或呈现器返回的响应对象没有状态/标题/应用程序设计器),则不会向侦听器发送事件。这在这个版本中不是真的,在1.3A13中也不是真的。
1.3A13(2010年9月14日)¶
漏洞修补¶
这个
traverse路由谓词未能成功生成遍历路径。
特征¶
为了方便配置“默认安全”的应用程序,添加了默认权限功能。如果提供了默认权限,则默认权限将用作所有视图注册的权限字符串,这些注册在其他情况下不会命名权限。这些API支持:
向配置程序添加了一个新的构造函数参数:
default_permission.配置程序中添加了一个新方法:
set_default_permission.添加了一个新的zcml指令:
default_permission.
添加新的请求API:
request.add_finished_callback. 完成的回调由路由器在请求处理的最后无条件地调用。有关更多信息,请参阅文档“Hook”叙述章节的“使用完成的回调”部分。A
request.matched_route当路由匹配时,属性现在被添加到请求中。它的值是匹配的“route”对象(请参见IRoute内部接口repoze.bfg.interfaces路由对象的API的API文档)。这个
exception为了“完成回调”和“响应回调”的好处,请求的属性现在设置得稍早一些,并且在一组稍有不同的场景中。在以前的版本中,exception如果找不到异常视图,则根本没有设置请求的属性。在这个版本中,request.exception当路由器捕获到异常时,即使找不到异常视图,也会立即设置属性。这个
add_route配置器的方法现在接受pregenerator参数。结果路径的预产生器由调用route_url为了调整用户为特殊目的传递给它的参数集,例如塔架“子域”支持。它将影响由返回的URLroute_url. 见repoze.bfg.interfaces.IRoutePregenerator接口以获取更多信息。
向后不兼容¶
路由器不再设置值
wsgiorg.routing_args路线匹配时进入环境。价值曾经是((), matchdict). 这个功能只是在变更日志中被斜引用过;它从未被记录为API。这个
exception请求的属性现在默认为None. 在以前的版本中,request.exception如果在请求处理期间用户代码未引发异常,则属性不存在;只有在找到异常视图后,该属性才开始存在。
废弃¶
这个
repoze.bfg.interfaces.IWSGIApplicationCreatedEvent事件接口已重命名为repoze.bfg.interfaces.IApplicationCreated. 同样地,repoze.bfg.events.WSGIApplicationCreatedEvent类已重命名为repoze.bfg.events.ApplicationCreated. 旧的别名将无限期地继续工作。这个
repoze.bfg.interfaces.IAfterTraversal事件接口已重命名为repoze.bfg.interfaces.IContextFound. 同样地,repoze.bfg.events.AfterTraversal类已重命名为repoze.bfg.events.ContextFound. 旧的别名将无限期地继续工作。对wsgi环境值的引用
bfg.routes.matchdict和bfg.routes.route从文档中删除。这些将在内部保留几个版本,但它是request.matchdict和request.matched_route现在是获取matchdict和导致匹配的路由对象的“官方”方法。
文档¶
添加的文档
default_permissionZCML指令。添加的文档
default_permission构造函数值和set_default_permission配置程序API文档中的方法。在“安全”章节中添加了一个名为“设置默认权限”的新章节。
文件
renderer_globals_factory和request_factory配置器构造函数的参数。在文档的“Hook”章节中添加了两个部分:“使用响应回调”和“使用完成的回调”。
添加了
request.exception属性repoze.bfg.request.RequestAPI文档。为“响应回调”和“完成回调”添加了词汇表条目。
“请求处理”叙述章节已更新,以记录完成和响应回调步骤。
接口API文档中的新接口:
IRoutePregenerator.在url分派叙述文档章节中添加了“匹配的路由”部分,详细介绍了
matched_route属性。
1.3A12(2010年9月8日)¶
漏洞修补¶
修复错误
repoze.bfg.url.static_urlURL生成:如果使用两个资源规范来创建两个单独的静态视图,但它们共享一个公共前缀,则有可能static_url将生成错误的URL。在中修复另一个错误
repoze.bfg.static_urlURL生成:生成的URL中的斜线太多。防止可能导致
RuntimeError渲染尚未渲染一次的变色龙模板时。当多个人或线程试图同时执行同一视图时,这通常会在重新启动后直接发生:https://bugs.launchpad.net/karl3/+bug/621364
特征¶
论点
repoze.bfg.configuration.Configurator.add_route之前被称为path现在叫做pattern为了更好的解释。为了向后兼容,传递一个名为path到add_route仍然可以无限期地工作。这个
pathzcml的属性route指令现在命名为pattern为了更好的解释。老年人path属性将无限期地继续工作。
文档¶
所有将路由模式称为
path现在已更新,将它们作为pattern.这个
repoze.bfg.interfacesAPI文档页面现在通过repoze.sphinx.autointerface.URL调度叙述章节现在指的是
interfaces第章解释IRoute对象。
贴纸模板¶
已更新RoutesAlchemy模板以使用
pattern在其路由声明中而不是path.
依赖关系¶
tests_require现在包括repoze.sphinx.autointerface作为依赖。
内部的¶
将API添加到
Configurator已命名get_routes_mapper. 这将返回一个实现IRoutesMapper接口。这个
repoze.bfg.urldispatch.RoutesMapper对象现在有一个get_route返回单个路由对象的方法或None.一种新的接口
repoze.bfg.interfaces.IRoute加入。这个repoze.bfg.urldispatch.Route对象实现此接口。从路由对象访问路由模式的规范属性现在是
pattern而不是path.使用
hash()而不是id()当计算自定义路由/视图谓词的“phash”时,为了允许自定义谓词对哪些谓词“相等”进行某种控制。使用
response.headerlist.append而不是response.headers.add在里面repoze.bfg.request.add_global_response_headers如果响应不是WebOB响应。这个
repoze.bfg.urldispatch.Route构造函数(不是API)现在接受不同的参数顺序。以前是(pattern, name, factory=None, predicates=()). 现在是(name, pattern, factory=None, predicates=()). 这是为了支持与configurator.add_route.这个
repoze.bfg.urldispatch.RoutesMapper.connect方法(不是API)现在接受不同的参数顺序。以前是(pattern, name, factory=None, predicates=()). 现在是(name, pattern, factory=None, predicates=()). 这是为了支持与configurator.add_route.
1.3A11(2010年9月5日)¶
漏洞修补¶
提前处理响应回调和newResponse事件,使响应的突变生效。
1.3A10(2010-09-05)¶
特征¶
一个新的
repoze.bfg.request.Request.add_response_callback已添加API。这种方法在新的repoze.bfg.requestAPI章。它可用于在创建具体的响应对象之前影响响应值。这个
repoze.bfg.interfaces.INewResponse接口现在包括request因此,inewresponse的处理程序现在可以访问导致响应的请求。现在,配置器的以下每个方法都允许将以下命名参数作为“点式名称字符串”(例如“foo.bar.baz”)传递,而不是作为必须导入的实际实现对象传递:
- setup_registry
根目录工厂、身份验证策略、授权策略、调试记录器、区域设置协商器、请求工厂、渲染器全局工厂
- add_subscriber
用户,iface
- derive_view
看法
- add_view
视图,
for_,上下文,请求类型,包含- 附加路由()
视图,视图,工厂,
for_视图上下文- 扫描
包
- add_renderer
工厂
- set_forbidden_view
看法
- set_notfound_view
看法
- set_request_factory
工厂
- 设置“渲染器”全局“工厂”()
工厂
- set_locale_negotiator
谈判者
- testing_add_subscriber
event_iface
漏洞修补¶
在内部为本地“静态视图”注册的路由模式(通过
staticZCML指令或通过add_static_view配置程序的方法)不正确。它是为例如。static*traverse,而它应该已经注册static/*traverse. 症状:当两个静态视图共享相同的路径前缀(例如/static和/static2)
向后不兼容¶
如果视图代码(或渲染器)返回的响应不是“真实”响应(例如,如果它不具有
.status,.headerlist和.app_iterATT)
文档¶
为添加API章节
repoze.bfg.request模块,其中包括repoze.bfg.request.Request类(“请求对象”)。修改“请求和响应”叙述章节以引用新的
repoze.bfg.requestAPI章。一些内容从本章移到了API文档本身。现在允许对配置器方法进行各种更改,以表示允许将python点状名称作为输入。
内部的¶
使附加
global_response_headers请求的属性(假定包含一系列的头键/值对,稍后将由路由器添加到响应中)已被删除。的功能repoze.bfg.request.Request.add_response_callback取代它。这个
repoze.bfg.events.NewResponse类的构造已更改:现在必须使用(request, response)而不是简单的(response).
1.3A9(2010年8月22日)¶
特征¶
配置程序现在接受一个点式名称。 一串 作为一个包
package构造函数参数。这个package参数以前必须是包 对象 (不是虚线名称字符串)。这个
repoze.bfg.configuration.Configurator.with_package方法已添加。此方法返回一个新的配置器,该配置器使用与其调用的配置器对象相同的应用程序注册表。新的配置器是用它的package构造函数参数设置为传递给的值with_package. 这一特性将使未来的BFG版本更容易在当前只允许对象引用的地方允许虚线名称作为参数(然而,允许虚线名称而不是到处引用对象的工作尚未完成)。新的
repoze.bfg.configuration.Configurator.maybe_dotted方法解析作为其dotted全局python对象的参数。如果无法解析该值,则repoze.bfg.configuration.ConfigurationError提高了。如果提供的值为dotted不是字符串,将无条件返回该值,而不尝试任何解析。新的
repoze.bfg.configuration.Configurator.absolute_resource_spec方法将可能相对的“资源规范”字符串解析为绝对版本。如果提供的值为relative_spec不是字符串,将无条件返回该值,而不尝试任何解析。
向后不兼容¶
中的函数
repoze.bfg.renderers已命名render和render_to_response在1.3A6中引入了一组**values要传递给呈现器的值的参数。这是错误的,因为渲染器不需要只接受字典(它们可以接受任何类型的对象)。现在,发送到渲染器的值必须作为名为value. 这个request然而,参数仍然是关键字参数。中的函数
repoze.bfg.renderers已命名render和render_to_response现在接受一个名为package.这个
get_rendererAPI在repoze.bfg.renderers现在接受package参数。
文档¶
ZCML
include指令文档不正确:它们指定了filename而不是(正确的)file作为允许的属性。
内部的¶
这个
repoze.bfg.resource.resolve_resource_spec函数现在可以接受一个包对象作为它的pname参数而不仅仅是包名称。这个
_renderer_factory_from_name和_renderer_from_name删除了配置器的方法。这些都不是原料药。这个
_render,_render_to_response和_make_response函数与repoze.bfg.render(在1.3A6中添加)已移除。新助手类
repoze.bfg.renderers.RendererHelper加入。地图视图功能
repoze.bfg.configuration现在只接受渲染器名称参数,而不是同时使用renderer和renderer_名称参数。它也需要一个package现在参数。使用
imp.get_suffixes间接指向repoze.bfg.path.package_name而不是硬编码.py.pyc和.pyo在试图决定某个目录是否为包时用于比较。使测试在Jython下再次运行(尽管它们目前并没有全部通过)。
reify修饰器现在维护它包装的函数的docstring。
1.3A8(2010年8月8日)¶
特征¶
新公共接口:
repoze.bfg.exceptions.IExceptionResponse. 此接口由所有内部异常类(例如repoze.bfg.exceptions.NotFound和repoze.bfg.exceptions.Forbidden)的实例都是异常对象,可以作为wsgi响应对象。这个接口是公开的,这样就可以配置同样是有效的wsgi响应工厂的异常类来实现它们,或者配置同样是异常实例的异常实例,或者配置响应实例来提供它们。新API类:
repoze.bfg.view.AppendSlashNotFoundViewFactory.在任何视图中只能有一个未找到的视图
repoze.bfg应用。即使你使用repoze.bfg.view.append_slash_notfound_view作为未找到的视图,repoze.bfg仍然必须生成404 Not Found当无法重定向到斜线附加的URL时响应;此未找到的响应将对网站用户可见。如果您不关心这个404响应是什么样子的,并且您只需要重定向来斜杠附加的路由URL,那么您可以使用
repoze.bfg.view.append_slash_notfound_view对象作为未找到视图。但是,如果您希望使用 习俗 当URL无法重定向到斜线附加的URL时,NotFound视图可调用,您可能希望使用repoze.bfg.view.AppendSlashNotFoundViewFactory类作为未找到视图,将NotFound视图作为其构造函数的第一个参数提供给它。例如::from repoze.bfg.exceptions import NotFound from repoze.bfg.view import AppendSlashNotFoundViewFactory def notfound_view(context, request): return HTTPNotFound('It aint there, stop trying!') custom_append_slash = AppendSlashNotFoundViewFactory(notfound_view) config.add_view(custom_append_slash, context=NotFound)
这个
notfound_view提供的必须遵循的两个参数视图可调用调用调用约定(context, request)(context将是异常对象)。
文档¶
扩展了url分派叙述章节的“请求后清理”部分。
扩展了url分派叙述章节的“重定向到斜线附加路由”部分。
内部的¶
以前,在配置程序设置中注册了两个默认视图函数(一个用于
repoze.bfg.exceptions.NotFound已命名default_notfound_view一个repoze.bfg.exceptions.Forbidden已命名default_forbidden_view)以呈现内部异常响应。这些默认视图函数已被删除,替换为在配置程序设置中注册的常规默认视图函数。repoze.bfg.interfaces.IExceptionResponse只返回异常实例的接口;NotFound和Forbidden类现在仍然是异常工厂,但它们也是响应工厂,生成实现新的repoze.bfg.interfaces.IExceptionResponse接口。
1.3A7(2010年8月1日)¶
特征¶
这个
repoze.bfg.configuration.Configurator.add_routeAPI现在返回添加的路由对象。A
repoze.bfg.events.subscriber添加了装饰器。这个修饰器修饰模块作用域函数,然后在执行scan()后将其视为事件侦听器。参见事件叙述文档章节和repoze.bfg.events有关更多信息,请参阅模块文档。
漏洞修补¶
当为尚未存在的路由添加视图时(“尚未存在”是指临时添加视图,并为尚未通过添加路由添加的路由添加路由名称),该视图的值
custom_predicate参数add_view迷路了。症状:当同时使用URL调度和自定义视图谓词时,错误的视图匹配。A的模式匹配
:segmentURL调度路由模式中的标记现在总是至少匹配一个字符。请参阅下面这个变更日志中的“向后不兼容”。
向后不兼容¶
正则表达式中存在进行URL匹配的错误。例如,URL匹配机制将导致模式
/{{foo}}to match the root URL/resulting in a match dictionary of `` 'foo':u'或模式 ``/{{fud}}/edit might match the URL `` //edit``生成匹配字典 ``{{'fud':u''}}. 它的目的总是:segment模式中的标记需要匹配 至少一个 不匹配空字符串。然而,这意味着在某些情况下,应用程序无意中依赖的路由匹配可能不再发生。
文档¶
添加了对
repoze.bfg.events.subscriber装饰到事件叙述章节。补充
repoze.bfg.events.subscriberAPI文档repoze.bfg.eventsAPI文档。在“设计防御”一章中添加了一个名为“zope 3”的部分,默认情况下强制执行“ttw”授权检查;bfg不执行。
1.3A6(2010年7月25日)¶
特征¶
新论点
repoze.bfg.configuration.Configurator.add_route以及routeZCML指令:traverse. 如果你想context成为其他人root对象当此路由匹配时,可以将遍历模式拼写为traverse参数。此遍历模式将用作遍历路径:遍历将从该路由所隐含的根对象(全局根或由返回的对象)开始。factory与此路由关联)。的语法
traverse论点与之相同path. 例如,如果path提供的是articles/:article/edit和traverse提供的参数为/:article,当一个请求出现,导致路由匹配时,article匹配值为“1”(当请求URI为/articles/1/edit)遍历路径将生成为/1. 这意味着根对象__getitem__将用名称调用1在穿越阶段。如果1对象存在,它将成为context请求。遍历叙事有更多关于遍历的信息。如果遍历路径包含路径参数中不存在的段标记名,则会发生运行时错误。这个
traverse模式不应包含不存在于path.当匹配包含
*traverse路径中的剩余标记。这个traverse参数允许您将路由模式与任意遍历路径关联,而不使用*traverse余数标记;相反,您可以使用其他匹配信息。请注意
traverse当参数附加到具有*traverse路径中的剩余标记。一种新的方法
Configurator存在:set_request_factory. 如果使用,此方法将设置repoze.bfg路由器创建所有请求对象。这个
Configurator构造函数接受一个附加参数:request_factory. 如果使用,此参数将设置repoze.bfg路由器创建所有请求对象。这个
Configurator构造函数接受一个附加参数:request_factory. 如果使用,此参数将设置repoze.bfg路由器创建所有请求对象。一种新的方法
Configurator存在:set_renderer_globals_factory. 如果使用,此方法将设置repoze.bfg用于创建渲染器全局的路由器。一种新的方法
Configurator存在:get_settings. 如果使用,此方法将返回当前设置对象(执行与repoze.bfg.settings.get_settingsAPI)。这个
Configurator构造函数接受一个附加参数:renderer_globals_factory. 如果使用,此参数将设置repoze.bfg用于创建渲染器全局的路由器。添加
repoze.bfg.renderers.render,repoze.bfg.renderers.render_to_response和repoze.bfg.renderers.get_renderer功能。这些是必需的API,将使用与renderer=属性/参数以生成渲染器或渲染器。因为这些API为所有呈现提供了一个中心API,所以它们现在形成了执行强制模板呈现的首选方式。使用名为的函数render_*来自以下模块repoze.bfg.chameleon_zpt和repoze.bfg.chameleon_text现在不鼓励(尽管不推荐)。支持旧模板系统特定API的代码现在调用新模板repoze.bfg.renderer代码。这个
repoze.bfg.configuration.Configurator.testing_add_template已重命名为testing_add_renderer. 使用旧名称提供向后兼容别名。
文档¶
这个
Hybrid叙述章节现在包含了traverse路由参数。这个
Hooks叙述性章节现在包含有关更改请求工厂和添加渲染器全局工厂的部分。API文档包括一个新模块:
repoze.bfg.renderers.这个
Templates章节已更新;所有在示例中使用模板化特定API来执行呈现的叙述(例如repoze.bfg.chameleon_zpt.render_template_to_response方法)改为使用repoze.bfg.renderers.render_*功能。
漏洞修补¶
这个
header谓词(用作视图谓词或路由谓词时)在使用名称/regex对指定时出现问题。当头在头字典中不存在时,可以馈送regex匹配项None使它抛出TypeError: expected string or buffer例外。现在,谓词按预期返回false。
废弃¶
这个
repoze.bfg.renderers.rendered_response函数从来不是一个官方的API,但可能是通过野外扩展导入的。它在这个版本中被正式否决。使用repoze.bfg.renderers.render_to_response相反。以下API是 文档 已弃用(意味着文档中已正式弃用它们,但在使用时不会引发弃用错误,并且可能会无限期地继续工作):
在
repoze.bfg.chameleon_zpt模块:get_renderer,get_template,render_template,render_template_to_response. 建议的替代方案记录在这些方法的文档字符串中(文档中仍然存在这些方法)。在
repoze.bfg.chameleon_text模块:get_renderer,get_template,render_template,render_template_to_response. 建议的替代方案记录在这些方法的文档字符串中(文档中仍然存在这些方法)。通常,要执行与模板相关的函数,现在应该使用
repoze.bfg.renderers模块。
向后不兼容¶
新的内部异常类( not API)
repoze.bfg.exceptions.PredicateMismatch现在存在。当无法调用多视图的组成视图时(由于没有谓词匹配),当前会引发此异常。以前,在这种情况下,repoze.bfg.exceptions.NotFound提高了。我们为预期的代码提供向后兼容性NotFound当没有谓词匹配时引发repoze.bfg.exceptions.PredicateMismatch继承NotFound. 这将导致为注册的任何异常视图NotFound当谓词不匹配时调用,就像前面的行为一样。然而,有一个反常的情况会暴露出向后的不兼容性。如果1)您有一个注册为多视图成员的视图2)此视图显式地引发了
NotFound例外 为了 继续执行多视图中的下一个谓词检查,该代码现在的行为将不同:与其跳到下一个视图匹配,不如将NotFound提升到顶级异常处理机制。使代码依赖于视图提升的行为NotFound如果继续进行下一个谓词匹配,将是一个悲剧,但并非不可能,因为NotFound是公共接口。repoze.bfg.exceptions.PredicateMismatch不是公共API,不能由应用程序代码依赖,因此不应将视图代码更改为引发PredicateMismatch. 相反,移动引发NotFound将视图中的异常输出到自定义视图谓词中。如果在bfg 1.3下运行应用程序的单元测试套件时,
KeyError命名模板或ValueError如果指示“渲染器工厂”未注册,则可能会引发(例如ValueError: No factory for renderer named '.pt' when looking up karl.views:templates/snippets.pt,您可能需要在测试代码中执行一些额外的设置。最好的解决方案是使用
repoze.bfg.configuration.Configurator.testing_add_renderer(或者,也可以是被否决的repoze.bfg.testing.registerTemplateRenderer或registerDummyRenderer)包含每个单独单元测试套件的代码中的API,用于为被测代码使用的每个模板和呈现器注册一个“虚拟”呈现器。例如::config = Configurator() config.testing_add_renderer('karl.views:templates/snippets.pt')
这将为此特定缺少的模板注册一个基本的虚拟渲染器。这个
testing_add_renderer事实上的API 收益率 渲染器,但是如果你不关心渲染器是如何使用的,你也不关心它的引用。有一种更粗糙的方法来解决这个问题。它导致在测试系统时使用“真正的”模板实现,这是次优的,因为测试运行速度较慢,而单元测试实际上不会 be 单元测试,但更容易。始终确保您致电
setup_registry()配置器的方法。如::reg = MyRegistry() config = Configurator(registry=reg) config.setup_registry()
调用
setup_registry只有当你 传球 一registry配置器构造函数的参数。setup_registry如果不传入registry.如果您的测试套件还没有使用配置器,并且仍在使用旧的
repoze.bfg.testingAPI名称setUp或cleanUp,这些将代表您注册渲染器。此主题的症状存在一个变体:您可能已经为正在测试的代码使用的模板注册了一个虚拟模板或呈现器。
testing_register_renderer或registerTemplateRenderer,但(可能您不知道)测试中的代码期望能够使用“真实”模板呈现器实现来检索或呈现 另一个 您忘记的模板被呈现为调用正在测试的代码的副作用。因为它发现了 real 模板,而系统以前正在测试,现在不能。解决方案是相同的。它还可以帮助减少使用 资源规格 指定测试套件和代码中的模板路径,而不是两者中的相对路径。资源规范是明确的,而相对路径需要相对于“here”,其中“here”并不总是定义得很好(测试套件中的“here”可能与测试代码中的“here”相同,也可能不同)。
1.3A5(2010年7月14日)¶
特征¶
新的内部异常:
repoze.bfg.exceptions.URLDecodeError. 此URL是名为UnicodeDecodeError.当将URL段解码为Unicode失败时,引发的异常现在为
repoze.bfg.exceptions.URLDecodeError而不是UnicodeDecodeError. 这使得注册一个异常视图成为可能,当repoze.bfg无法解码URL。
漏洞修补¶
修复回归
repoze.bfg.configuration.Configurator.add_static_view. 在1.3a4之前,包含斜线的视图名称被支持作为路由前缀。1.3A4通过尝试将它们作为完整的URL来打破这一点。
文档¶
这个
repoze.bfg.exceptions.URLDecodeError异常被添加到API文档的异常章节中。
向后不兼容¶
在以前的版本中,当URL在遍历过程中无法从UTF-8解码时,
TypeError提高了。现在产生的错误是repoze.bfg.exceptions.URLDecodeError.
1.3A4(2010年7月3日)¶
特征¶
无证Hook:品牌
get_app和get_root的repoze.bfg.paster.BFGShellCommand在端件可能干扰默认版本的情况下可挂起。在早期版本中,与URL调度路由相关联的自定义路由谓词(发送到
custom_predicates的参数repoze.bfg.configuration.Configurator.add_route)始终需要2位参数签名,例如(context, request). 在此版本之前,context参数总是None.在这个版本中,传递给谓词的第一个参数现在是一个常规命名的字典。
info组成的route和match.match是一个字典:它表示路由在URL中匹配的参数。route表示匹配的路由的对象。当谓词需要访问路由匹配时,这很有用。例如::
def any_of(segment_name, *args): def predicate(info, request): if info['match'][segment_name] in args: return True return predicate num_one_two_or_three = any_of('num, 'one', 'two', 'three') add_route('num', '/:num', custom_predicates=(num_one_two_or_three,))
这个
route对象是具有两个有用属性的对象:name和path. 这个name属性是路由名称。这个path属性是路由模式。在一组路由谓词中使用路由的示例:def twenty_ten(info, request): if info['route'].name in ('ymd', 'ym', 'y'): return info['match']['year'] == '2010' add_route('y', '/:year', custom_predicates=(twenty_ten,)) add_route('ym', '/:year/:month', custom_predicates=(twenty_ten,)) add_route('ymd', '/:year/:month:/day', custom_predicates=(twenty_ten,))
这个
repoze.bfg.url.route_urlAPI已更改。如果关键字_app_url在传递给的参数中存在route_url,此值将用作生成的URL的协议/hostname/port/leading path前缀。例如,使用_app_url属于http://example.com:8080/foo会导致URLhttp://example.com:8080/foo/fleeb/flub如果与route_name扩展到/fleeb/flub.现在可以使用URL作为
name反馈参数repoze.bfg.configuration.Configurator.add_static_view. 当name参数为url时,repoze.bfg.url.static_urlAPI将生成将此URL(作为前缀)连接到包含静态文件名的路径。这使得将静态媒体放在单独的Web服务器上进行生产成为可能,同时保持静态媒体包在内部,并在开发期间由开发Web服务器提供服务。
文档¶
zodb wiki教程(docs/tutorials/bfgwiki)的授权章节已更改为通过组而不是直接用户名来演示授权(感谢alex marandon)。
sqlachemy wiki教程(docs/tutorials/bfgwiki2)的授权章节已更改为通过组而不是直接用户名来演示授权。
将对教程源的请求重定向到https://docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/wiki/index.html以及https://docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/wiki2/index.html分别。
一个名为
Custom Route Predicates添加到URL调度叙述章节。已更新“静态资源”一章,以提到使用
static_url生成指向外部Web服务器的URL。
内部的¶
远离的
repoze.bfg.static.StaticURLFactory支持围绕(仍然是内部的)的新抽象repoze.bfg.static.StaticURLInfo助手类。
1.3A3(2010-05-01)¶
贴纸模板¶
这个
bfg_alchemy和bfg_routesalchemy模板不再注册handle_teardown调用的事件侦听器DBSession.remove. 克里斯·威瑟斯发现这是不必要的。
文档¶
“bfgwiki2”(url dispatch wiki)教程代码和文档已更改,以删除
handle_teardown调用的事件侦听器DBSession.remove.有没有提到
handle_teardown粘贴程序模板使用的事件侦听器已从URL分派叙述章节中删除。在i18n叙述文档章节中增加了一个标题为“检测可用语言”的部分。
1.3A2(2010年4月28日)¶
特征¶
区域设置协商器不再需要显式注册。默认的区域设置协商器位于
repoze.bfg.i18n.default_locale_negotiator现在无条件地用作…嗯,默认的区域设置协商器。默认的区域设置协商器变得更加复杂。
首先,谈判代表寻找
_LOCALE_请求对象的属性(可能由视图或事件侦听器设置)。然后它寻找
request.params['_LOCALE_']价值。然后它寻找
request.cookies['_LOCALE_']价值。
向后不兼容¶
默认的区域设置协商器现在查找名为
_LOCALE_而不是名为locale在里面request.params.
行为改变¶
现场谈判者现在可以回来了
None,表示应使用默认区域设置。
文档¶
更新了“国际化和本地化”一章中有关语言环境协商的文档。
i18n叙述章节文档的扩展部分,讨论如何使用gettext文件。
1.3A1(2010年4月26日)¶
特征¶
添加了“异常视图”。当使用异常(从Python继承的任何内容)时
Exceptionbuiltin)作为视图上下文参数,例如:from repoze.bfg.view import bfg_view from repoze.bfg.exceptions import NotFound from webob.exc import HTTPNotFound @bfg_view(context=NotFound) def notfound_view(request): return HTTPNotFound()
对于上述示例,当
repoze.bfg.exceptions.NotFound任何视图或根工厂引发异常notfound_view将调用View Callable并返回其响应。其他普通视图谓词也可以与异常视图注册一起使用:
from repoze.bfg.view import bfg_view from repoze.bfg.exceptions import NotFound from webob.exc import HTTPNotFound @bfg_view(context=NotFound, route_name='home') def notfound_view(request): return HTTPNotFound()
上述异常视图将
route_name属于home,表示只有匹配的路由的名称为时才会调用它。home. 因此,对于系统中的任何给定异常,您都可以有多个异常视图:“最具体”的视图将在与视图注册匹配的一组请求情况时调用。唯一不能成功使用的谓词是name. 用于查找异常视图的名称总是空字符串。针对继承自的对象注册的现有(1.3之前)普通视图
Exception将继续工作。用于用户定义的异常和用作上下文的系统异常的异常视图也将起作用。该功能可用于任何视图注册机制。 (
@bfg_viewdecorator、zcml或命令config.add_view风格)。这一特点是安德烈波普善意贡献。
使用“金星” (https://docs.pylonsproject.org/projects/venusian/en/latest/ )表演
bfg_view装饰扫描,而不是依赖于bfg内部装饰扫描仪。(事实上,金星只是bfg内部装饰扫描仪的一个推广)。国际化和本地化特性如“叙述性文档”一章所述,标题为
Internationalization and Localization.名为的新部署设置
default_locale_name加入。如果此字符串作为粘贴程序存在.ini文件选项,它将被视为默认的区域设置名称。默认区域设置名称在与区域设置相关的操作(如语言翻译)期间使用。现在可以通过设置一个与bfg相关的贴纸器来为所有的变色龙bfg模板打开变色龙模板“调试模式”。
.ini名为的文件设置debug_templates. 变色龙模板在渲染失败时引发的异常有时没有什么帮助。debug_templates允许您配置应用程序开发环境,以便变色龙在模板编译和执行期间生成的异常将包含更有用的调试信息。在所有新项目中,默认情况下都启用此模式。添加名为的配置程序的新方法
derive_view可用于从用户提供的函数、实例或类生成可调用的BFG视图。这对于希望包装由用户提供的可调用文件的外部框架和插件作者很有用,这些可调用文件遵循与对象相同的调用约定和响应约定,这些对象可以作为视图可调用文件直接提供给BFG。见derive_view方法在repoze.bfg.configuration.Configurator博士学位。
ZCML¶
添加
translationdir支持本地化的zcml指令。添加
localenegotiator支持本地化的zcml指令。
废弃¶
异常视图功能取代了
set_notfound_view和set_forbidden_view方法Configurator以及notfound和forbiddenZCML指令。这些方法和指令将在可预见的未来继续工作,但在文档中已弃用。
依赖关系¶
新的安装时间依赖于
venusian已添加分发。新的安装时间依赖于
translationstring已添加分发。现在需要变色龙1.2.3或更高版本(国际化和每模板调试设置)。
内部的¶
视图注册和查找现在使用三个“requires”参数而不是两个参数来完成,以适应异常视图的正交性。
这个
repoze.bfg.interfaces.IForbiddenView和repoze.bfg.interfaces.INotFoundView接口被删除;它们不是API,并且随着异常视图的添加而变得残留。去除
repoze.bfg.compat.pkgutil_26.py和导入别名repoze.bfg.compat.walk_packages. 这些只是内部扫描机器需要的;金星人取代了内部扫描机器,因此不再需要这些。
文档¶
异常视图文档已添加到
Hooks叙述章节。标题为
Internationalization and Localization加入。“环境变量和
ini“文件设置”章节已更改:有关default_locale_name已添加设置。新的API章节
repoze.bfg.i18n模块已添加。新的文档
translationdir和localenegotiator添加了ZCML指令。在“模板”一章中增加了一节,标题为“模板中更好的例外”,描述了设置的结果。
debug_templates = true.
贴纸模板¶
所有粘贴模板现在创建一个
setup.cfg其中包括与鼻测试和babel消息目录提取/编译相关的命令。A
default_locale_name = en已将设置添加到每个现有的贴纸模板。A
debug_templates = true已将设置添加到每个现有的贴纸模板。
许可¶
Edgewall(BSD)许可证作为部分代码添加到licenses.txt文件中。
repoze.bfg.i18n源于Babel源。
1.2(2010年2月10日)¶
1.2B6无变化。
1.2B6(2010-02-06)¶
向后不兼容¶
移除的魔法特征
repoze.bfg.url.model_url如果发现请求与路由匹配,则在模型的路径之前预先准备了一个完全扩展的urldispatch路由url。这项功能构思不周,并没有在所有场景中都起作用。
漏洞修补¶
提供的更正确的转换
renderer值到资源规格值(内部)。
1.2B5(2010-02-04)¶
漏洞修补¶
1.2B4引入了一个bug,通过路由配置添加的视图将视图命名为可调用视图,并且
view_attr破碎了。症状:MyViewClass is not callable或__call__正在调用类的,而不是名为via的方法view_attr.修正一个错误
renderer论据@bfg_view提供包相关模板文件名的装饰器可能未正确解析。症状:不适当Missing template resource错误。
1.2B4(2010年2月3日)¶
文档¶
更新gae教程以使用变色龙而不是jinja2(现在可以了)。
漏洞修补¶
确保
secureauthtktauthenticationpolicy构造函数的标志按文档所述执行(合并Daniel Holth的Fancy-cookies-2分支)。
特征¶
添加
path和http_onlyAuthtktAuthenticationPolicy构造函数的选项(合并Daniel Holth的Fancy-cookies-2分支)。
向后不兼容¶
去除
view_header,view_accept,view_xhr,view_path_info,view_request_method,view_request_param和view_containment来自的谓词参数Configurator.add_route参数列表。这些论点是推测性的。如果需要这些参数公开的特性,请使用route_name论据add_view方法。去除
view_header,view_accept,view_xhr,view_path_info,view_request_method,view_request_param和view_containment来自的谓词参数routeZCML指令属性集。这些属性是推测性的。如果需要这些属性公开的功能,请使用route_name的属性viewZCML指令。
依赖关系¶
删除对的依赖项
sourcecodegen(不取决于变色龙1.1.1+)。
1.2b3(2010-01-24)¶
漏洞修补¶
使用“混合模式”(Traversal和UrlDispatch)时,默认情况下查找与路由相关的视图,即使使用更具体的上下文进行了与路由无关的视图注册。默认设置是先查找具有更具体上下文的视图。使用新的
use_global_views返回旧行为的路由定义的参数。
特征¶
添加
use_global_views参数add_route配置器的方法。当此参数为true时,为注册的视图 no 如果找不到与路由相关的更多特定视图,则将找到路由。添加
use_global_viewsZCML属性<route>指令(见上文)。
内部的¶
注册视图时,使用“requires”接口将视图适配器注册为
(request_type, context_type)而不是(context_type, request_type). 这提供了更明智的查找,因为注册总是使用特定的请求接口进行,但注册可能不使用特定的上下文接口进行。通常,在创建多适配器时,您希望对所需的接口进行排序,以便更可能使用特定接口注册的元素在不太可能注册的元素之前进行排序。
1.2B2(2010-01-21)¶
漏洞修补¶
当
Configurator传递的实例zope.component.registry.Components作为一个registry构造函数参数,将实例修复为具有我们期望的repoze.bfg.registry.Registry什么时候?setup_registry被称为。这使得可以将全局zope组件注册表用作bfg应用程序注册表。使用webob 0.9.7.1时,会对名为
charset在内部repoze.bfg.request.Request. 现在BFG 要求 WebOB>=0.9.7,并添加了代码,以便此拒绝警告消失。修正了一个视图查找排序错误,其中一个三元组的谓词数量越多的视图首先注册(字面上是第一个,而不是“更早”),在视图查找过程中会丢失一个注册的谓词数量越少的视图。
确保具有完全n个自定义谓词的视图总是在具有完全n个非自定义谓词的视图之前调用,因为视图配置中的其他所有谓词都是相等的。
文档¶
更改zcml指令文档的呈现。
添加一个叙述性文档章节:“在repoze.bfg中使用zope组件架构”。
依赖关系¶
需要Webob>=0.9.7
1.2B1(2010-01-18)¶
漏洞修补¶
在
bfg_routesalchemy,bfg_alchemy粘贴模板和bfgwiki2教程,通过注册一个repoze.tm.after_end回调而不是依赖__del__A方法Cleanup类添加到wsgi环境中。这个__del__战略脆弱,在野外造成了问题。感谢丹尼尔·霍尔特的测试。
特征¶
从PasteDeploy配置文件读取日志配置
loggers当paster bfgshell被调用。
文档¶
为准备出版书籍而进行的重大返工。
1.2A11(2010-01-05)¶
漏洞修补¶
制作
paster bfgshell和paster create -t bfg_xxxJython的工作(修复轻微的不相容性和治疗__doc__在类层面)。更新了对的依赖项
WebOb需要支持测试中使用的功能的版本。
特征¶
Jython兼容性(至少当repoze.bfg.jinja2用作模板引擎时;变色龙在Jython下不工作)。
当找不到呈现器模板时,在回溯中显示模板资源规范的派生abspath。
当由于平台不兼容而无法呈现变色龙模板时,显示原始回溯。
1.2A10(2010-01-04)¶
特征¶
这个
Configurator.add_view方法现在接受名为context. 这是名为for_;优先于for_,但是for_将继续得到“永远”的支持。这个
viewzcml指令现在接受名为context. 这是名为for;优先于for,但是for将继续得到“永远”的支持。这个
Configurator.add_route方法现在接受名为view_context. 这是名为view_for;优先于view_for,但是view_for将继续得到“永远”的支持。这个
routezcml指令现在接受名为view_context. 这是名为view_for;优先于view_for,但是view_for将继续得到“永远”的支持。
文档和粘贴模板¶
Latex 渲染调整。
的所有用途
Configurator.add_view使用它的方法for_参数现在使用context改为参数。的所有用途
Configurator.add_route使用它的方法view_for参数现在使用view_context改为参数。的所有用途
view使用其for属性现在使用context改为属性。的所有用途
route使用其view_for属性现在使用view_context改为属性。添加一个(最小)教程,处理使用
repoze.catalog在一个repoze.bfg应用。
文件许可¶
放宽文件许可,允许衍生作品:它现在在 Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License . 这只是一个文档许可证更改;以及
repoze.bfg软件将继续在https://web.archive.org/web/20190401024809/http://repoze.org/许可证.html(类似于BSD)。
1.2A9(2009年12月27日)¶
文件许可¶
这个 文档 (结果)
make <html|latex|htmlhelp>内docs目录)在本版本中,现在是在Creative Commons Attribution非商业性非衍生作品3.0美国许可证下提供的,如https://creativecommons.org/licenses/by-nc-nd/3.0/us/. 这只是文档的许可证更改repoze.bfg软件将继续在https://web.archive.org/web/20190401024809/http://repoze.org/许可证.html(类似于BSD)。
文档¶
在生成的索引中添加了手动索引项。
记录以前存在的(但不是API)
repoze.bfg.configuration.Configurator.setup_registry方法作为Configurator.修复各种文档代码块中的语法错误。
创建了新的顶级文档部分:“ZCML指令”。本节包含详细的ZCML指令信息,其中一些信息已从各个叙述章节中删除。
文档的 Latex 渲染已经得到了改进。
添加了一个“前题”部分,其中包含作者、版权和许可信息。
1.2A8(2009年12月24日)¶
特征¶
添加
**kwARG到Configurator.add_settings应用程序编程接口。添加
hook_zca和unhook_zca方法到Configurator应用程序编程接口。这个
repoze.bfg.testing.setUp方法现在返回Configurator可用于在单元测试期间进行进一步配置的实例。
漏洞修补¶
这个
json呈现程序未能将响应内容类型设置为application/json. 现在可以了,通过设置request.response_content_type除非已设置此属性。这个
string呈现程序未能将响应内容类型设置为text/plain. 现在可以了,通过设置request.response_content_type除非已设置此属性。
文档¶
通过使用更好的Sphinx角色(如“class”、“func”、“meth”)来改进一般文档。这意味着在所有的叙述、教程和API文档元素中都有更多指向API文档的超链接。
在各个地方添加了对强制配置的描述,这些描述只描述了zcml配置。
各种教程的语法更新。
增加了
repoze.bfg.authentication,repoze.bfg.authorization和repoze.bfg.interfacesAPI文档的模块。
废弃¶
这个
repoze.bfg.testing.registerRoutesMapperAPI(在早期的1.2 alpha中添加)已被弃用。它的导入现在会生成一个弃用警告。
1.2A7(2009年12月20日)¶
特征¶
repoze.bfg.configuration.Configurator类:testing_securitypolicy,testing_models,testing_add_subscriber和testing_add_templaterepoze.bfg.testingAPI命名registerDummySecurityPolicy,registerModels,registerEventListener和registerTemplateRenderertesting命名的API名义上是不推荐使用的(尽管它们可能会永远存在,因为它们在野外大量使用)。向添加新的API
repoze.bfg.configuration.Configurator类:add_settings. 此API可用于添加“设置”(通过repoze.bfg.settings.get_settingsapi)在最初设置配置器之后。这对于测试来说是最有用的。添加
custom_predicates论据Configuratoradd_view方法bfg_view装饰器和zcml的属性列表view指令。如果custom_predicates如果指定,则它必须是谓词可调用项的序列(谓词可调用项接受两个参数:context和request回报True或False)只有当所有自定义谓词都返回时,才会调用关联的视图可调用True. 当没有现有的预定义谓词可用时,请使用一个或多个自定义谓词。预定义谓词和自定义谓词可以自由混合。添加
custom_predicates论据Configuratoradd_route以及zcml的属性列表route指令。如果custom_predicates如果指定,则它必须是谓词可调用项的序列(谓词可调用项接受两个参数:context和request回报True或False)只有当所有自定义谓词都返回时,才会调用关联的路由。True,否则路由匹配继续。注意这个值context将永远None传递到自定义路由谓词时。当没有现有的预定义谓词可用时,请使用一个或多个自定义谓词。预定义谓词和自定义谓词可以自由混合。
内部的¶
移除
repoze.bfg.testing.registerTraverser功能。此函数从来不是API。
文档¶
文档中已弃用的大多数助手函数
repoze.bfg.testing模块。这些助手函数可能不会很快被删除,也不会很快生成警告,因为它们在野外大量使用,但是在配置器的方法中存在等价的行为。
1.2A6(2009年12月18日)¶
特征¶
这个
Configurator对象现在有两个新方法:begin和end. 这个begin方法应在任何“配置”开始之前(例如,在add_view,等。这个end方法应在所有“配置”完成后调用。以前,在进行必要的配置之前(1.1及之前),配置的开始和结束总是由加载ZCML文件的过程所暗示。当zcml加载发生时,包含请求和注册表的threadlocal数据结构在加载之前被修改,在加载之后被删除,确保需要的所有框架代码
get_current_registry在ZCML加载期间,已满足要求。在命令式配置期间调用的一些API方法(例如
Configurator.add_view当涉及渲染器时)以历史原因结束调用get_current_registry. 但是,在1.2A5及以下版本中,配置程序没有提供任何允许人们确保get_current_registry返回正在使用的配置程序所暗示的注册表。begin现在就是为了这个目的。相反地,end弹出线程本地堆栈,撤消begin.我们将此边界明确化,以减少在不同情况下使用配置器时(例如,在单元测试和应用程序代码中,而不是在初始应用程序设置中)可能出现的混淆。
为不调用的1.2A1-1.2A5编写的现有代码
begin或end继续以以前的方式工作。但是,建议将此代码更改为调用begin和end以减少未来出现混乱的可能性。所有
paster生成应用程序框架的模板现在可以使用begin和end它们在各自的副本中使用的配置器方法run.py和tests.py.
文档¶
所有使用
Configurator对象进行应用程序设置和测试设置现在使用新的begin和end配置器的方法。
漏洞修补¶
当A
repoze.bfg.exceptions.NotFoundorrepoze.bfg.exceptions.Forbiddenclass (as opposed to instance) was raised as an exception within a root factory (or route root factory), the exception would not be caught properly by therepoze.bfg.路由器和它将向上传播到调用堆栈,而不是像预期那样呈现未找到的视图或禁止的视图。当强制添加用作呈现器的变色龙页面或文本模板时(通过
Configurator.add_view或者一些衍生产品),他们太急切地试图查找reload_templates设置通过get_settings,表示它们始终以非自动重新加载模式(默认)注册。现在每个人都要等到template访问属性以查找值。添加与以前注册的路由同名的路由时,不会从映射器的路由列表中删除旧路由。症状:旧的注册路由将在路由查找期间使用(并且可能是匹配的),而不应该有机会使用它。
1.2A5(2009年12月10日)¶
特征¶
当
repoze.bfg.exceptions.NotFound或repoze.bfg.exceptions.Forbidden从自定义根工厂或factory对于一个路由,适当的响应现在被发送到请求的用户代理(分别是NotFound视图或Forbidden视图的结果)。当从根工厂中引发这些错误时,context传递到未找到或禁止的视图将None. 此外,请求将不会用view_name,subpath,context,等。如果允许进行遍历,通常是这样。
内构件¶
表示由
Configurator现在可作为repoze.bfg.exceptions.ConfigurationError.
文档¶
通用文档更新,它在更多地方考虑了必要的配置,并更自由地使用术语表引用。
删除在新的请求事件订阅服务器中更改请求类型的解释,因为其他谓词现在通常是完成此操作的更简单的方法。
在文档中添加了“线程局部变量”叙述章节,并添加了一个API章节来记录
repoze.bfg.threadlocals模块。在“观点”叙述性文件章节中增加了“特殊例外”一节,解释了募集资金的效果。
repoze.bfg.exceptions.NotFound和repoze.bfg.exceptions.Forbidden从视图内代码。
依赖关系¶
新的依赖
twill包已添加到setup.pytests_require参数(只有在repoze.bfgsetup.py test或setup.py nosetests被调用)。
1.2A4(2009年12月7日)¶
特征¶
repoze.bfg.testing.DummyModel现在接受一个新的构造函数关键字参数:__provides__. 如果提供了此构造函数参数,则它应该是接口或接口元组。然后,生成的模型将提供这些接口(它们将通过zope.interface.alsoProvides)
漏洞修补¶
GAE手术失败,大概是因为
repoze.bfg.configuration模块开始尝试导入repoze.bfg.chameleon_zpt和repoze.bfg.chameleon_text模块,这些不能在非cpython平台上使用。它现在可以容忍这些模块的启动时导入失败,并且只在实际使用其中一个包中的模板时引发导入错误。
1.2A3(2009年12月2日)¶
漏洞修补¶
这个
repoze.bfg.url.route_url函数传递不当_query和/或_anchor的参数mapper.generate函数,导致放大。当两个视图以不同的方式注册时
for接口或类,以及for注册的第一个视图是第二个视图的超类,repoze.bfg视图机制会错误地将两个视图与相同的“多视图”关联起来。多视图是指具有 确切地 对于/request/viewname值相同,不考虑继承。症状:即使正确指定了一个for_一个或两个视图配置的视图配置期间的接口/类。
向后不兼容¶
这个
repoze.bfg.templating模块已被删除;它在1.1中已被弃用,实际上从未包含任何API。
1.2A2(2009年11月29日)¶
漏洞修补¶
此包的长描述(如pypi上所示)不是有效的restructuredtext,因此不可渲染。
尝试使用HTTP方法名称字符串,例如
GET作为一个request_type谓词参数在强制配置或装饰器中遇到时导致启动时失败(症状:Type Error: Required specification must be a specification)不过,现在这又起作用了request_method现在是将视图配置与HTTP请求方法关联的首选谓词参数。
文档¶
修复了“启动”叙述性文档章节;它解释了应用程序构造函数的“旧方法”。
1.2A1(2009年11月28日)¶
特征¶
强制配置模式。
A
repoze.bfg应用程序现在可以作为单个python文件开始其生命。稍后,应用程序可能演变为包中的一组python文件。甚至在以后,它可能会开始使用其他配置功能,例如ZCML. 但是,无论是使用包还是使用非必需的配置,都不需要创建一个简单的repoze.bfg应用程序不再。强制配置使
repoze.bfg与“微框架”竞争,如 Bottle 和 Tornado .repoze.bfg它有许多微框架所缺少的功能,所以它有望成为“两全其美”的功能。最简单的可能
repoze.bfg应用程序现在为:from webob import Response from wsgiref import simple_server from repoze.bfg.configuration import Configurator def hello_world(request): return Response('Hello world!') if __name__ == '__main__': config = Configurator() config.add_view(hello_world) app = config.make_wsgi_app() simple_server.make_server('', 8080, app).serve_forever()
现在存在一个新类:
repoze.bfg.configuration.Configurator. 这个类构成了在“强制”配置的应用程序和传统的声明性配置的应用程序之间共享机器的基础。这个
repoze.bfg.testing.setUp函数现在接受三个额外的可选关键字参数:registry,request和hook_zca.如果
registry论点不是None,参数将被视为设置为“当前注册表”的注册表(它将由repoze.bfg.threadlocal.get_current_registry)在测试期间。如果registry论证是None(默认值),将创建一个新的注册表并在测试期间使用。的值
request参数用作“当前请求”(它将由repoze.bfg.threadlocal.get_current_request)在测试期间;默认为None.如果
hook_zca是True(默认),即zope.component.getSiteManager函数将被一个返回registry(或默认创建的注册表,如果registry是None)而不是由返回的注册表zope.component.getGlobalSiteManager,导致Zope组件体系结构API (getSiteManager,getAdapter,getUtility等等)使用测试注册表而不是全局ZCA注册表。这个
repoze.bfg.testing.tearDown函数现在接受unhook_zca参数。如果这个论点是True(违约),zope.component.getSiteManager.reset()将被调用。这将导致zope.component.getSiteManager函数作为全局ZCA注册表zope.component.getGlobalSiteManager)再一次。这个
run.py各种模块repoze.bfgpaster模板现在使用repoze.bfg.configuration.Configurator类而不是(现在的遗留)repoze.bfg.router.make_app函数生成一个wsgi应用程序。
文档¶
文档现在在大多数示例中使用“仅请求”视图调用约定(而不是
context, request公约)。这只是一个文档更改;该context, request公约也得到了支持和记录,并将“永远”。repoze.bfg.configuration已添加API文档。标题为“创造你的第一个
repoze.bfg已添加“应用程序”。本章详细介绍了新的repoze.bfg.configuration.Configurator类,并演示简化的“强制模式”配置;执行repoze.bfg以前,应用程序配置非常困难。一个名为“配置、装饰和代码扫描”的叙述性文档章节,解释了zcml-与命令式-与基于装饰器的配置等效性。
“zcml hooks”一章已重命名为“hooks”;它记录了如何通过命令式配置和zcml来覆盖hooks。
有关如何提供备用“响应工厂”的说明已从“Hook”一章中删除。这个特性可能在以后的版本中被删除(它现在仍然有效,只是没有文档记录)。
在单元测试章节中添加一个标题为“测试设置和拆卸”的部分。
漏洞修补¶
ACL授权策略调试输出
debug_authorization由于所传递的主体集的授权失败而拒绝执行视图时,控制台调试输出的打开程度不如拒绝执行视图时的清晰程度,因为所传递的主体集从未与沿袭中任何ACL中的任何ACE匹配。在这种情况下,我们报告<default deny>作为ace值和根acl或<No ACL found on any object in model lineage>如果没有找到ACL。当两个视图注册为同一视图时
accept参数,但如果请求进入具有Accept接受的标题 任何一个 在由注册了谓词的一组视图定义的媒体类型中,一个或多或少“随机”的视图将“获胜”。现在,我们更加努力地使用与具有最具体的视图配置相关联的视图可调用accept参数。多亏了阿尔贝托·瓦弗德的一个初始补丁。
内构件¶
路由映射器不再是根工厂包装器。现在路由器直接查询。
这个
repoze.bfg.registry.make_registryCallable已被删除。这个
repoze.bfg.view.map_viewCallable已被删除。这个
repoze.bfg.view.owrap_viewCallable已被删除。这个
repoze.bfg.view.predicate_wrapCallable已被删除。这个
repoze.bfg.view.secure_viewCallable已被删除。这个
repoze.bfg.view.authdebug_viewCallable已被删除。这个
repoze.bfg.view.renderer_from_nameCallable已被删除。使用repoze.bfg.configuration.Configurator.renderer_from_name相反(但仍然不是API)。这个
repoze.bfg.view.derive_viewCallable已被删除。使用repoze.bfg.configuration.Configurator.derive_view相反(但仍然不是API)。这个
repoze.bfg.settings.get_optionsCallable已被删除。它的工作已被repoze.bfg.settings.Settings类构造函数。这个
repoze.bfg.view.requestonly函数已移动到repoze.bfg.configuration.requestonly.这个
repoze.bfg.view.rendered_response函数已移动到repoze.bfg.configuration.rendered_response.这个
repoze.bfg.view.decorate_view函数已移动到repoze.bfg.configuration.decorate_view.这个
repoze.bfg.view.MultiView类已移动到repoze.bfg.configuration.MultiView.这个
repoze.bfg.zcml.Uncacheable类已被删除。这个
repoze.bfg.resource.resource_spec函数已被删除。所有处理路径属性的zcml指令现在都使用
pathZCML上下文的方法,将相对名称解析为绝对名称(强制配置要求)。这个
repoze.bfg.scripting.get_root当API将请求设置为threadlocal时,它现在使用的是“real”webob请求,而不是fakerequest。这个
repoze.bfg.traversal.traverseAPI现在在调用遍历器时使用“real”webob请求,而不是fakerequest。这个
repoze.bfg.request.FakeRequest类已被删除。zca线程本地API的大多数使用
getSiteManager,getUtility,getAdapter,getMultiAdapter线程本地API)已从核心中删除。相反,当需要线程局部时,核心使用repoze.bfg.threadlocal.get_current_registry获取注册表的API。名为的内部ilogger实用程序
repoze.bfg.debug现在只是一个未命名的IDebugLogger实用程序。已为b/w compat注册旧名称的命名实用程序。这个
repoze.bfg.interfaces.ITemplateRendererFactory接口已被删除;已不再使用。而不是依赖于
martian包做代码扫描,我们现在只使用我们自己的扫描程序。我们现在不再依赖
repoze.zcml包装;相反,repoze.bfg包包含的实现adapter,subscriber和utility指令。与下列功能有关:
repoze.bfg.view.render_viewrepoze.bfg.view.render_view_to_iterablerepoze.bfg.view.render_view_to_responserepoze.bfg.view.append_slash_notfound_viewrepoze.bfg.view.default_notfound_viewrepoze.bfg.view.default_forbidden_viewrepoze.bfg.configuration.rendered_responserepoze.bfg.security.has_permissionrepoze.bfg.security.authenticated_useridrepoze.bfg.security.effective_principalsrepoze.bfg.security.view_execution_permittedrepoze.bfg.security.rememberrepoze.bfg.security.forgetrepoze.bfg.url.route_urlrepoze.bfg.url.model_urlrepoze.bfg.url.static_urlrepoze.bfg.traversal.virtual_root现在,这些函数中的每一个都应该使用一个请求对象来调用,该对象具有
registry表示当前repoze.bfg注册表。它们返回到从线程本地API获取注册表。
向后不兼容¶
使用的单元测试
zope.testing.cleanup.cleanUp为了将测试彼此隔离,现在可能由于测试之间缺乏隔离而开始失败。原因如下:在repoze.bfg 1.1及之前版本中,注册表由
repoze.bfg.threadlocal.get_current_registry当没有其他注册表被推送到线程时,本地堆栈是zope.component.globalregistry.base全球注册(亦称zope.component.getGlobalSiteManager())然而,在repoze.bfg 1.2+中,在这种情况下返回的注册表是新的模块范围repoze.bfg.registry.global_registry对象。这个zope.testing.cleanup.cleanUp函数清除zope.component.globalregistry.base全局注册表无条件。但是,它不知道repoze.bfg.registry.global_registry对象,所以不清除它。如果您使用
zope.testing.cleanup.cleanUp功能在setUp而不是使用单元测试套件中的测试用例(从1.1开始更正确)repoze.bfg.testing.setUp,您将需要替换所有呼叫zope.testing.cleanup.cleanUp打电话到repoze.bfg.testing.setUp.如果替换所有呼叫
zope.testing.cleanup.cleanUp打电话到repoze.bfg.testing.setUp是不可行的,你可以把这段代码放在某个精确执行的地方。 once ( not 对于测试套件中的每个测试;在 `` __init__.py`` 你的包或包的tests分装将是一个合理的地方)::import zope.testing.cleanup from repoze.bfg.testing import setUp zope.testing.cleanup.addCleanUp(setUp)
当在
repoze.bfg.threadlocal.manager线程本地数据结构(当没有“当前请求”或我们不在r.b.testing.setUp-有界单元测试).get方法返回包含 全球的 注册表。在以前的版本中,此函数返回了全局zope“base”注册表:结果zope.component.getGlobalSiteManager,它是zope.component.registry.Component类。然而,在此版本中,全局注册表返回repoze.bfg.registry.Registry类。此注册表实例始终可以导入为repoze.bfg.registry.global_registry.实际上,这意味着当你打电话
repoze.bfg.threadlocal.get_current_registry当没有要求或setUp有界单元测试有效,您将始终返回位于repoze.bfg.registry.global_registry. 这也意味着repoze.bfgAPI callget_current_registry将使用此注册表。这一变化是因为
repoze.bfg现在,期望它使用的注册表具有与的裸实例稍有不同的API。zope.component.registry.Components.视图注册不再注册
repoze.bfg.interfaces.IViewPermission适配器(框架不再检查它;从1.1开始,视图就负责提供自己的安全性)。这个
repoze.bfg.router.make_appCallable不再接受authentication_policy也不authorization_policy参数。此功能在1.0版中已被弃用,已被删除。模糊:配置视图的机器
request_typeand 一route_name将忽略route_name仅为所暗示的接口注册视图request_type. 在不太可能的情况下,您试图同时使用这两个功能,症状可能是命名为request_type但在匹配路径时,未找到与路径相关的。现在,如果一个视图同时配置了request_type和Aroute_name,引发错误。这个
routezcml指令现在不再接受request_type或view_request_type属性。这些属性实际上并没有以任何有用的方式工作(请参见上面的条目)。因为
repoze.bfg包现在包含adapter,subscriber和utilityzcml指令,它现在是一个错误<include package="repoze.zcml" file="meta.zcml"/>在a的zcml中repoze.bfg应用。如果您的zcml发生冲突,则会引发zcml冲突错误。这不应该是“正常”安装的问题;它始终是repoze.bfg.includeszcml在过去包含这个文件;现在不包含。这个
repoze.bfg.testing.zcml_configure已删除API。使用Configurator.load_zcmlAPI代替。
废弃¶
这个
repoze.bfg.router.make_app函数现在名义上已被弃用。它的导入和使用不会引发警告,也可能永远不会消失。但是,使用repoze.bfg.configuration.Configurator类现在是生成wsgi应用程序的首选方法。注意
make_app电话zope.component.getSiteManager.sethook( repoze.bfg.threadlocal.get_current_registry)代表调用者挂接ZCA全局API查找,以实现向后兼容性。如果你不使用make_app,至少在应用程序使用ZCA全局API时,调用代码需要自己执行此调用。 (getSiteManager,getAdapter等)。
依赖关系¶
依赖于
martian包已被删除(其功能在内部被替换)。依赖于
repoze.zcml包已被删除(其功能在内部被替换)。
1.1.1(2009-11-21)¶
漏洞修补¶
“混合模式”应用程序(明确使用遍历的应用程序 之后 URL发送通过
<route>包含的路径*traverse元素)在1.1-final和所有1.1 alpha和beta版本中被破坏。未注册的视图route_name路由阴影视图注册到route_name不适当。
1.1(2009年11月15日)¶
内构件¶
从中删除死掉的iRouteRequirement接口
repoze.bfg.zcml模块。
文档¶
改进“扩展现有应用程序”叙述章节。
在“防御设计”一章中增加更多章节。
1.1B4(2009年11月12日)¶
漏洞修补¶
使用
alsoProvides在urldispatch模块中,将接口附加到请求,而不是directlyProvides以避免干扰NewRequest事件处理程序中设置的接口。
文档¶
将1.0.1和上一个changelog移到history.txt。
添加示例到
repoze.bfg.url.model_url文档字符串。在FrontPage文档中添加“防御BFG设计”章节。
模板¶
去除
ez_setup.py从所有的粘贴模板、示例和教程中导入distribute兼容性。文档已经解释了如何安装virtualenv(其中包括setuptools所以这些文件、导入和使用是多余的。
废弃¶
这个
options千瓦到repoze.bfg.router.make_app函数已弃用。取而代之的是关键字参数settings. 这个options关键字继续工作,并且在检测到它时不会发出拒绝警告。但是,粘贴程序模板、代码示例和文档现在引用settings而不是options. 这种变化/贬低主要是为了与get_settings()API和文档中不同地方的“设置”讨论:我们希望在任何地方使用相同的名称来指代相同的东西。
1.1B3(2009-11-06)¶
特征¶
repoze.bfg.testing.registerRoutesMapper增加了测试设施。此测试函数在注册表中为需要其存在的测试注册路由“mapper”对象。此功能记录在repoze.bfg.testingAPI文档。
漏洞修补¶
使用在通过调用的交互式IPython会话中输入的赋值的复合语句
paster bfgshell不再无法正确地改变shell命名空间。例如,这组用于失败的语句:In [2]: def bar(x): return x ...: In [3]: list(bar(x) for x in 'abc') Out[3]: NameError: 'bar'
在这个版本中,
bar找到了函数,正确的输出现在发送到控制台。多亏了丹尼尔·霍尔特。这个
bfgshell命令无法正常运行;它仍然希望能够使用空的environ而不是请求对象。
向后不兼容¶
这个
repoze.bfg.scripting.get_root函数现在需要request对象作为其第二个参数,而不是environ.
1.1B2(2009-11-02)¶
漏洞修补¶
防止PYPI安装失败,原因是
easy_install尝试太难猜出最好的粘贴版本。什么时候?easy_install从pypi中提取,它读取来自不同页面的链接,以确定“更新的”版本。当它试图找到“粘贴”发行版时,它错误地选择了一个名为“Paste-Deploy-0.1”(注意破折号)的古老版本包的链接,并且不知何故认为它是“粘贴”的最新版本。它还以某种方式“有益地”决定从SVN中检出这个包的一个版本。我们将粘贴依赖项版本固定到大于1.7的版本以解决此问题。easy_install缺陷。
文档¶
修复“混合”叙事章节:停止声称
<view>提到路由名称的语句需要在<route>创建路由的语句。从1.1a1开始就没有这种情况。“什么是新的?”
repoze.bfg1.1“添加到叙述性文件中的文件。
特征¶
添加新的事件类型:
repoze.bfg.events.AfterTraversal. 此类型的事件将在遍历完成后,但在调用任何视图代码之前发送。喜欢repoze.bfg.events.NewRequest,此事件将具有单个属性:request表示当前请求。与的请求属性不同repoze.bfg.events.NewRequest但是,在AfterTraversal事件期间,请求对象将拥有由遍历器设置的属性,最显著的是context,这将是找到并调用视图时使用的上下文。界面repoze.bfg.events.IAfterTraversal可用于订阅事件。例如::<subscriber for="repoze.bfg.interfaces.IAfterTraversal" handler="my.app.handle_after_traverse"/>
与任何框架事件一样,订阅服务器函数应该期望一个参数:
event.
依赖关系¶
而不是依赖
chameleon.core和chameleon.zpt单独分配,取决于马耳他的重新包装Chameleon分配(包括chameleon.core和chameleon.zpt)
1.1B1(2009-11-01)¶
漏洞修补¶
路由根工厂称为路由工厂,它是具有环境而不是请求的默认路由工厂。此错误的症状之一:使用
bfg_zodb1.1a9中的粘贴模板无法正常工作。恢复原状
renderer别名view_renderer在<route>ZCML指令(野生1.1a BW兼容)。bfg_routesalchemy贴纸模板:更改<route>声明:重命名renderer属性到view_renderer.由返回的头值
authtktauthenticationpolicyremember和forget方法的类型为unicode. 这违反了wsgi规范,导致TypeError当这些头在mod_wsgi.如果具有与根URL匹配的路由的bfg应用程序安装在阿拉巴马州modwsgi的路径下
WSGIScriptAlias /myapp /Users/chrism/projects/modwsgi/env/bfg.wsgi,主路线(路径为'/'或'')路径不匹配/myapp被访问(仅当路径/myapp/参观了)。现在修复了这个问题:如果urldispatch根工厂注意到路径“info”为空,它会在尝试匹配之前将其转换为一个斜杠。
文档¶
在
<route>教程zcml中的声明,重命名renderer属性到view_renderer(FWD COMPAT)。修复由1.1a9中断的各种教程
<route>指令更改。
内部的¶
处理遍历模块中的潜在circref。
1.1a9(2009年10月31日)¶
漏洞修补¶
当
request_param在zcml上使用了谓词属性view如果任何两个相同的谓词视图组合了谓词值和=签名和一个不带(例如aVSa=123)
特征¶
在早期版本的bfg中,“根工厂”(即
get_root可调用传递给make_app或由factory路由的属性)是使用“裸机”wsgi环境调用的。在这个版本中,如果继续,它将用request对象。传递给工厂的请求对象以这样的方式实现类似字典的方法:期望传递给环境的现有根工厂代码将继续工作。这个
__call__插件“遍历器”实现(注册为ITraverser或ITraverserFactory)现在将收到 请求 作为它的唯一论据__call__方法。在以前的版本中,它通过了一个wsgienviron对象。传递给工厂的请求对象以这样的方式实现类似字典的方法:期望传递给环境的现有遍历器代码将继续工作。ZCML
route指令的属性xhr,request_method,path_info,request_param,header和accept现在 路线 谓词而不是 view 谓语。如果在路由配置中指定了这些谓词中的一个或多个,则所有谓词都必须返回true,路由才能匹配请求。如果与路由关联的一个或多个路由谓词返回False在请求期间选中时,路由匹配失败,并尝试路由列表中的下一个匹配。这与以前的行为不同,以前的行为不存在路由谓词,所有谓词都被视为视图谓词,因为在这种情况下,没有尝试下一个路由。
文档¶
对支持从传递请求而不是环境到根工厂和遍历器的更改的叙述和API文档进行了各种更改。
内部的¶
该请求实现类似字典的方法,这些方法会改变并查询wsgi环境。这只是为了向后兼容根工厂,而根工厂希望
environ而不是请求。这个
repoze.bfg.request.create_route_request_factory返回请求工厂的函数被删除,而不是repoze.bfg.request.route_request_interface函数,返回接口。这个
repoze.bfg.request.Request类,它是webob.Request现在定义自己的__setattr__,__getattr__和__delattr__方法,重写默认的WebOB行为。默认WebOB行为将请求的属性存储在self.environ['webob.adhoc_attrs'],并在__getattr__. 由于速度和“期望”的原因,这种行为是不可取的。现在的属性request存储在request.__dict__(正如您可能从没有重写这些方法的对象期望的那样)。路由器不再呼叫
repoze.bfg.traversal._traverse它的工作是“内联”(速度)。颠倒路由器调用请求工厂和根工厂的顺序。现在首先调用请求工厂;结果请求被传递到根工厂。
这个
repoze.bfg.request.request_factory函数已被删除。它的功能不再需要了。当配置中提到路由时,包装默认根工厂的“路由根工厂”现在通过
zope.interface.directlyProvides. 这将取代(现在不存在)中的逻辑repoze.bfg.request.request_factory功能。这个
route和viewzcml指令现在将接口注册为命名实用程序(从repoze.bfg.request.route_request_interface)而不是请求工厂(现在丢失的repoze.bfg.request.create_route_request_factory.这个
repoze.bfg.functional模块已重命名为repoze.bfg.compat.
向后不兼容¶
显式恢复1.1a8中引入的功能:其中
root在发出NewRequest事件之前作为请求的属性提供。这使得一些潜在的未来功能不可能实现,或者至少很难实现(例如将遍历和视图查找分组到单个适配器查找中)。这个
containment,attr和renderer的属性routezcml指令被删除。
1.1a8(2009年10月27日)¶
特征¶
添加
path_info查看配置谓词。paster bfgshell如果可以导入,现在支持ipython。感谢Daniel Holth最初的补丁。添加
repoze.bfg.testing.registerSettingsAPI,见“repoze.bfg.testing”API章节。这允许注册通过repoze.bfg.settings.get_settings()用于单元测试。名字
root现在稍早(在发出newrequest事件之前)作为请求的属性提供。root是应用程序“根工厂”的结果。补充
max_age参数到authtktauthenticationpolicyZCML指令。如果设置了此值,它必须是一个整数,表示auth tkt cookie将生存的秒数。主要是,它的存在允许auth-tkt cookie跨浏览器会话生存。
漏洞修补¶
修复“扫描”过程中遇到的错误(当
<scan ..>指令用于1.1a7中介绍的zcml)。症状:AttributeError: object has no attribute __provides__在启动时引发。这个
reissue_time论据authtktauthenticationpolicyZCML指令现在实际工作。当设置为整数值时,每当请求需要身份验证时,都会在响应中追加一个AuthTicket set cookie头,“现在”减去AuthTicket的时间戳大于reissue_time秒。
文档¶
在叙述性文档中添加一章,标题为“请求和响应”,内容取自WebOB文档。
在“视图”一章中调用zcml指令的谓词属性。
修复路由文件 (
_query证明文件为query和_anchor证明文件为anchor)
向后不兼容¶
这个
authtkt身份验证策略remember方法不再是荣誉token或userdata关键字参数。
内部的¶
如何改变
bfg_viewdecorator用作类方法decorator时工作。在1.1a7中,“scan”指令实际上试图在启动时搜索扫描包中的每个类,调用dir针对每个找到的类,然后调用getattr根据发现的每件事dir看看是不是一种方法。这导致了一些奇怪的症状(例如AttributeError: object has no attribute __provides__,通常只是个坏主意。现在,不是在启动时为方法搜索类,而是bfg_view用于填充方法类的修饰符本身__dict__当它被用作方法修饰器时。这也需要一个令人讨厌的框架,但它比启动时的摸索行为稍微不那么讨厌。这本质上是一个回归到1.1a6“摸索”行为加上一些特殊的魔法使用bfg_viewdecorator作为方法decoratorbfg_view类本身。路由器现在检查
global_response_headers返回响应之前请求对象的属性。如果该值存在,则假定它是两个元组的序列,表示要附加到“normal”响应头的一组头。这个特征是内部的,而不是外部的,因为不清楚它是否会长期存在。它是为了支持reissue_timeAuthtkt身份验证策略的功能。接口itraverserFactory现在只是itraverser的别名。
1.1a7(2009年10月18日)¶
特征¶
不止一个
@bfg_view装饰师现在可以堆放在任何数量的其他上面。每次调用装饰器都注册一个视图配置。例如,下面的decorator和函数组合将为同一个可调用视图注册两个视图配置:from repoze.bfg.view import bfg_view @bfg_view(name='edit') @bfg_view(name='change') def edit(context, request): pass
这样就可以将多个视图配置与单个可调用的视图配置关联起来,而不需要任何zcml。
这个
@bfg_view现在可以对类方法使用decorator::from webob import Response from repoze.bfg.view import bfg_view class MyView(object): def __init__(self, context, request): self.context = context self.request = request @bfg_view(name='hello') def amethod(self): return Response('hello from %s!' % self.context)
当对类方法使用bfg_视图修饰器时,将为 班 (它是一个“类视图”,其中“attr”恰好是它所附加到的方法的名称),因此它在其中定义的类必须有一个合适的构造函数:一个接受
context, request或者只是request.
文档¶
补充
Changing the Traverser和Changing How :mod:`repoze.bfg.url.model_url` Generates a URL到文档的“Hook”叙述章节。
内部的¶
去除
ez_setup.py以及在setup.py. 在新的世界中,根据virtualenv安装说明,人们将已经拥有安装工具或分发工具。
1.1A6(2009年10月15日)¶
特征¶
添加
xhr,accept和header查看ZCML视图声明、ZCML路由声明的配置谓词,以及bfg_view装饰者。见Views叙述性文档一章了解关于这些谓词的更多信息。添加
setUp和tearDown功能到repoze.bfg.testing模块。使用setUp在测试设置和tearDown在测试中,拆卸现在是执行组件注册表设置和拆卸的推荐方法。以前,建议使用一个名为repoze.bfg.testing.cleanUp在测试设置和下拉列表中调用。repoze.bfg.testing.cleanUp仍然存在(由于其广泛使用,将“永远”存在);它现在只是repoze.bfg.testing.setUp名义上被否决。bfg组件注册表现在作为请求ie的一个属性在视图和事件订阅服务器代码中可用。
request.registry. 除了这个注释之外,这个事实目前是未记录的,因为bfg开发人员不需要在任何其他地方直接与注册表交互。bfg组件注册表现在继承自
dict也就是说,它可以作为一个简单的字典使用。 成分 通过例如registerUtility,registerAdapter和dict成员相比,类似的api方法保存在完全独立的命名空间中,因此使用其组件api方法不会影响字典命名空间中的键和值。同样,尽管组件注册表“碰巧是”一个字典,但是使用了诸如__setitem__不会影响对其进行的任何组件注册。换句话说,您通过例如repoze.bfg.threadlocal.get_current_registry或request.registry碰巧是一个组件注册表和一个字典,但是使用它的组件注册表API不会影响通过它的字典API添加到它的数据,反之亦然。这是一个基于“marco”目标的向前兼容性移动。公开和记录
repoze.bfg.testing.zcml_configure应用程序编程接口。此函数从zcml文件填充组件注册表,以进行测试。它记录在“单元和集成测试”一章中。
文档¶
虚拟主机叙述文档章节更新了有关
mod_wsgi.将所有索引URL指向文本1.1索引(这个alpha循环可能会持续一段时间)。
更新了各种教程测试模块以供使用
repoze.bfg.testing.setUp和repoze.bfg.testing.tearDown方法以鼓励这一点作为今后的最佳实践。在单元测试叙述性文档章节中增加了“创建集成测试”部分。因此,单元测试章节的名称现在是“单元和集成测试”。
向后不兼容¶
进口
getSiteManager和get_registry从repoze.bfg.registry不再支持。这些导入在repoze.bfg 1.0中被弃用。进口getSiteManager应该这样做from zope.component import getSiteManager. 进口get_registry应该这样做from repoze.bfg.threadlocal import get_current_registry. 这样做是为了防止循环导入依赖项。交替调用两者的代码基
zope.testing.cleanup.cleanUp和repoze.bfg.testing.cleanUp(同等对待,互换使用)在单元测试的设置/拆卸中,由于缺乏测试隔离,将开始经历测试失败。“正确”机制是repoze.bfg.testing.cleanUp(或repoze.bfg.testing.setUp和repoze.bfg.testing.tearDown)但是大量的遗留代码库将使用zope.testing.cleanup.cleanUp相反。我们支持zope.testing.cleanup.cleanUp但不能与repoze.bfg.testing.cleanUp在同一代码库中。您应该在单个代码库中使用一个或另一个测试清理函数,但不能同时使用这两个函数。
内部的¶
创造新
repoze.bfg.configuration承担之前由repoze.bfg.registry和repoze.bfg.router模块(避免循环导入依赖项)。结果
zope.component.getSiteManager使用设置的单元测试中的功能repoze.bfg.testing.cleanUp或repoze.bfg.testing.setUp将是repoze.bfg.registry.Registry而不是全球zope.component.globalregistry.base注册表。这也意味着线程本地zca api函数getAdapter和getUtility以及内部BFG机械(例如model_url和route_url)将在单元测试中查询此注册表。这是一个基于“marco”目标的向前兼容性移动。远离的
repoze.bfg.testing.addCleanUp功能和相关模块范围全局。这从来不是API。
1.1a5(2009年10月10日)¶
文档¶
更改“traversal+zodb”和“url dispatch+sqlacalchemy”wiki教程以使用新的to-1.1“渲染器”功能(从所有视图返回字典)。
在“查看”步骤之后,将测试添加到“url dispatch+sqlacalchemy”教程中。
在文档的“遍历”叙述章节中添加了模型图遍历图。
安
exceptions添加了API章节,记录了新的repoze.bfg.exceptions模块。描述“仅请求”视图调用约定在urldispatch叙述性章节中,在这里它是最有用的。
将解释BFG路由器操作的图表添加到“路由器”叙述章节。
特征¶
添加新的
repoze.bfg.testing应用程序编程接口:registerRoute,用于注册路由以满足呼叫,例如repoze.bfg.url.route_url在单元测试中。这个
notfound和forbiddenZCML指令现在接受以下附加属性:attr,renderer和wrapper. 它们与ZCML上下文中的含义相同。view指令。像姜戈那样的行为
APPEND_SLASH=True使用repoze.bfg.view.append_slash_notfound_view在应用程序中查看为“未找到”视图。如果此视图是“未找到”视图(表示找不到视图),并且在应用程序的配置中定义了任何路由,则PATH_INFO不是以斜线结尾,如果PATH_INFOplus 斜线匹配任何路由的路径,执行HTTP重定向到斜线附加路径_info。注意这会 losePOST数据信息(将其转换为GET),因此您不应该依赖于此来重定向POST请求。加快
repoze.bfg.location.lineage略微。加快
repoze.bfg.encode.urlencode(NEE)repoze.bfg.url.urlencode)略微。加快
repoze.bfg.traversal.model_path.加快
repoze.bfg.traversal.model_path_tuple略微。加快
repoze.bfg.traversal.traverse略微。加快
repoze.bfg.url.model_url略微。加快
repoze.bfg.url.route_url略微。加快速度
repoze.bfg.traversal.ModelGraphTraverser:__call__略微。轻微加速
repoze.bfg.router.Router.__call__.新的
repoze.bfg.exceptions创建该模块的目的是存储以前通过各种模块喷洒的异常。
内部的¶
移动
repoze.bfg.traversal._url_quote进入之内repoze.bfg.encode作为url_quote.
废弃¶
进口
repoze.bfg.view.NotFound被否决,赞成repoze.bfg.exceptions.NotFound. 旧位置仍在运行,但会发出拒绝警告。进口
repoze.bfg.security.Unauthorized被否决,赞成repoze.bfg.exceptions.Forbidden. 旧位置仍在运行,但会发出拒绝警告。重命名Unauthorized到Forbidden对异常的名称和在引发时调用的系统视图进行奇偶校验。
向后不兼容¶
我们以前为
urllib.urlencode函数命名repoze.bfg.url.urlencode它委托给stdlib函数,但在调用stdlib版本之前将所有unicode值封送到utf-8字符串。一个新的替代者现在住在repoze.bfg.encode替换不委托给stdlib。替换与stdlib实现和上一个实现不同
repoze.bfg.urlURL实现doseq参数现在是一种诱骗:它总是在doseq=True以速度为目的的方式(这是唯一理智的行为)。旧的导入位置 (
repoze.bfg.url.urlencode)仍然是函数,尚未弃用。在0.8a7中,实现对象所期望的返回值。
ITraverserFactory已从值序列更改为包含键的字典context,view_name,subpath,traversed,virtual_root,virtual_root_path和root. 到目前为止,返回序列的旧式遍历器仍在工作,但生成了一个反预测警告。在这个版本中,返回序列而不是字典的遍历器将不再工作。
1.1A4(2009年9月23日)¶
漏洞修补¶
在64位Linux系统上,作为多视图成员的视图(带有谓词的视图顺序)没有按正确的顺序进行评估。症状:在配置中,有两个视图同名,但其中一个视图具有
request_method=POST谓词和不带谓词的谓词都将无条件调用(即使请求是post请求)。多亏了塞巴斯蒂安·多奇,他提供了指出这一点的建筑机器人。
文档¶
添加了说明如何使用的教程
repoze.session(基于zodb的会话)在zodb-based repoze.bfg应用程序中。添加了一个教程,解释了如何将zeo添加到基于zodb的
repoze.bfg应用。添加了一个说明如何运行
repoze.bfg申请 mod_wsgi . 请参见文档的教程部分中的“在mod_wsgi下运行repoze.bfg应用程序”。
特征¶
添加
repoze.bfg.url.static_url能够生成指向静态资源的URL的API<static>ZCML指令。有关详细信息,请参阅“视图”叙述章节标题为“生成静态资源URL”的部分。添加
string渲染器。此呈现器将任何可调用视图的非响应返回值转换为字符串。它记录在“观点”叙述章节中。给予
routeZCML指令view_attr和view_renderer参数(以1.1A3功能加速)。这些也可以拼写为attr和renderer.
向后不兼容¶
实现
IRenderer接口(及)ITemplateRenderer`, which is a subclass of `` irender)现在必须接受额外的system论证中__call__方法实现。系统(而不是视图)计算的值由系统在system参数,它始终是字典。字典中的键包括:view(返回值的视图对象),renderer_name(渲染器的模板名或简单名称),context(上下文对象传递给视图),以及request(传递给视图的请求对象)。以前只有itemplaterenders接收到系统参数作为main中的元素value字典。
内部的¶
路
bfg_view对已修改的声明进行扫描。这应该没有外部影响。速度:不要在configure.zcml中注册ITraverFactory;而是依赖于queryadapter和modelgraphtraverser的手动默认值。
速度:不要在configure.zcml中注册IContextURL;而是依赖于QueryAdapter和TraversalContextURL的手动默认值。
HelloWorld基准测试的一般速度微改进:用使用“in”关键字的语句替换Try/Exceptions。
1.1A3(2009年9月16日)¶
文档¶
文件中的“观点”叙述章节已被广泛更新,以讨论“渲染者”。
特征¶
A
renderer属性已添加到视图配置中,替换了以前的(1.1a2)版本template属性。“渲染器”是一个接受视图返回值并将其转换为字符串的对象。这包括但不限于模板化系统。名为
IRenderer加入。现有接口,ITemplateRenderer现在从这个新接口派生。这个接口是内部的。名为
IRendererFactory加入。名为ITemplateRendererFactory现在从这个接口派生。这个接口是内部的。这个
view的属性view如果zcml指令还具有renderer属性。当渲染器是模板渲染器并且在渲染时不需要将名称传递给模板时,这非常有用。一个新的zcml指令
renderer已添加。它记录在文档的“视图”叙述章节中。ZCML
view指令(以及相关的bfg_viewdecorator)现在可以接受“wrapper”值。如果提供了“wrapper”值,则它是单独视图的值 name 属性。当视图wrapper属性被渲染,“内部”视图首先被正常渲染。然后将其主体作为“包装体”附加到请求,然后查找并呈现包装视图名称(使用repoze.bfg.render_view_to_response,通过了请求和上下文。假设包装器视图对request.wrapped_body,通常将其结构插入到其他呈现模板中。此功能使仅使用zcml或装饰器(而不是始终使用zpt metal和类似物将视图渲染包装在外部包装中)指定(可能嵌套)视图之间的“owrap”关系成为可能。
依赖关系¶
当在python<2.6下使用时,bfg现在对
simplejson包。
废弃¶
这个
repoze.bfg.testing.registerDummyRendererAPI已被弃用,取而代之的是repoze.bfg.testing.registerTemplateRenderer. 弃用警告是 not 在进口时以原名称签发;它将“永久”存在;但其存在已从文件中删除。这个
repoze.bfg.templating.renderer_from_cache函数已移动到repoze.bfg.renderer.template_renderer_factory. 这从来不是一个API,但在野外发现了使用它的代码。在进口时,将对前者发出弃用警告。
向后不兼容¶
这个
ITemplateRenderer接口已更改。以前它的__call__接受方法**kw. 它现在接受一个名为kw(修订:从1.1a4开始接受两个位置参数:value和system)这主要是一个内部变更,但是它在一个地方被暴露在API中:如果您已经使用了repoze.bfg.testing.registerDummyRendererAPI在您的测试中使用自定义的“renderer”参数和您自己的renderer实现,您需要更改该renderer实现以接受kw而不是**kw在其__call__方法(修订:接受value和system从1.1a4起的位置参数)。这个
ITemplateRendererFactory接口已更改。以前它的__call__方法接受auto_reload关键字参数。现在它__call__方法不接受关键字参数。渲染器现在自己负责确定自动重新加载的细节。这纯粹是一种内部变化。此接口从未是外部的。这个
template_renderer1.1a2中引入的zcml指令已被删除。它已被替换为renderer指令。上一个版本(1.1a2)添加了名为
template. 在此版本中,属性已重命名为renderer. 这意味着属性更通用:它现在不仅可以是模板名,还可以是任何渲染器名(alajson)在上一个版本(1.1a2)中,如果系统没有关联
template使用扩展名为“已知”的文件名查看配置值。在此版本中,必须使用renderer属性,该属性是以.txt扩展(例如)templates/foo.txt)使用变色龙文本渲染器。
1.1a2(2009年9月14日)¶
特征¶
ZCML
view指令(以及相关的bfg_viewdecorator)现在可以接受“attr”值。如果提供了“attr”值,则认为它是在需要响应时要调用的视图对象的名为方法。这通常只适用于作为类或实例的视图(对于函数不太有用,因为函数通常没有除__call__)ZCML
view指令(以及相关的bfg_viewdecorator)现在可以接受“template”值。如果提供了“template”值,并且view callable返回字典,则关联的模板将与字典一起呈现为关键字参数。请参见名为“视图template“在“视图”叙述文档一章中了解更多信息。
1.1a1(2009年9月6日)¶
漏洞修补¶
“测试”模块从bfg-alchemy-paster模板中删除;这些测试不起作用。
BugFix:
discriminator对于zcml,“route”指令不正确。可以注册两个发生冲突的路由,而不需要系统在启动时发出configurationconflictError。
特征¶
功能添加:查看谓词。它们暴露在
request_method,request_param和containmentzcml的属性view声明,或@bfg_view装饰者。视图谓词可用于为比以前更精确的环境参数集注册视图。例如,可以用相同的视图注册两个视图name用不同request_param属性。如果request.paramsdict包含“foo”(request_param=“foo”),可以调用一个视图;如果它包含“bar”(request_param=“bar”),则可以调用另一个视图。request_param也可以将键/值对命名为alafoo=123. 只有当fookey在request.params dict中,其值为“123”。这个特殊的例子可以为不同的表单提交编写单独的视图函数。其他谓词,containment和request_method工作相似。containment是一个视图谓词,仅当上下文的图形沿袭具有具有特定类或接口的对象时才匹配。request_method是一个视图谓词,当HTTPREQUEST_METHOD等于某个字符串(例如“post”)。这个
@bfg_viewdecorator现在接受三个附加参数:request_method,request_param和containment.request_method当您希望视图仅匹配具有特定HTTP的请求时使用REQUEST_METHOD;一个字符串,用于命名REQUEST_METHOD也可作为request_type为了向后兼容。request_param当您希望视图仅匹配包含特定request.params键(有值或无值)。containment当您想要匹配一个请求时使用,该请求的上下文在其图形沿袭中有一些类或接口。这些统称为“视图谓词”。这个
routeZCML指令获得荣誉view_request_method,view_request_param和view_containment属性,如果提供了相关视图,则将这些值传递给相关视图。另外,request_type属性现在可以拼写为view_request_type和permission可以拼写为view_permission. 以开头的任何属性view_现在可以不用view_前缀,所以view_for可以拼写为for现在,等等。这两种形式都记录在urldispatch叙述文档一章中。这个
request_paramzcml view指令属性(及其bfg_viewdecorator-cosin)现在可以同时指定键和值。例如,request_param="foo=123"意味着foo键的值必须为123使视图“匹配”。允许
repoze.bfg.traversal.find_interface使用类对象作为参数与model过去了。这意味着你现在可以find_interface(model, SomeClass)以及在世系中发现的第一个物体SomeClass作为其类(或找到的第一个对象SomeClass因为它的任何超类)都将被返回。补充
staticzcml指令,它为在目录中提供文件的视图注册路由。有关更多信息,请参阅“视图”叙述性文档一章的“使用zcml指令提供静态资源”一节。这个
repoze.bfg.view.static类现在接受一个字符串作为它的第一个参数(“根目录”),该参数表示包的相对名称,例如somepackage:foo/bar/static. 现在,这是使用此类拼写包相对静态路径的首选机制。一package_name为向后兼容,保留了关键字参数。如果提供的话,它将得到尊重。API
repoze.bfg.testing.registerView现在需要一个permission参数。用这个代替repoze.bfg.testing.registerViewPermission.路由声明的顺序与ZCML中使用“路由名称”的视图声明的顺序不再重要。以前,还不可能在“视图”声明中使用ZCML(按顺序)中尚未定义的路由的路由名称。
bfg路由器现在可以捕获
repoze.bfg.security.Unauthorized和repoze.bfg.view.NotFound呈现视图时出现异常。当路由器捕捉到Unauthorized,返回已注册的禁止视图。当路由器捕捉到NotFound,返回已注册的NotFound视图。
内部的¶
更改urldispatch内部:现在,路由对象是使用路径、名称和工厂来构建的,而不是使用名称、匹配器、生成器和工厂。
将(非API)默认视图、默认禁止视图和默认未找到视图函数移动到
repoze.bfg.view模块(从repoze.bfg.router)已从中删除ViewPermissionFactory
repoze.bfg.security. 视图权限检查现在通过注册和查找ISecuredView来完成。这个
staticZCML指令现在在构造路由时使用自定义根工厂。界面
IRequestFactories已从repoze.bfg.interfaces模块中删除。这个接口从来不是API。函数名为
named_request_factories数据结构名为DEFAULT_REQUEST_FACTORIES已从中删除repoze.bfg.request模块。这些都不是原料药。这个
IViewPermissionFactory接口已被删除。这从来不是API。
文档¶
“视图”叙述文档中的仅请求约定示例被破坏。
修复了安全API文档中与遗忘和记忆相关的文档错误。
固定文件
repoze.bfg.view.static(叙事中的)Views章)。
废弃¶
API
repoze.bfg.testing.registerViewPermission已弃用。
向后不兼容¶
界面
IPOSTRequest,IGETRequest,IPUTRequest,IDELETERequest和IHEADRequest已从中删除repoze.bfg.interfaces模块。这些没有被记录为API Post-1.0。不要使用其中一个,而是使用request_methodzcml属性或request_methodbfg_view decorator参数包含http方法名(其中一个GET,POST,HEAD,PUT,DELETE)而不是这些接口中的一个,如果您是显式使用的话。在集合中传递字符串 (GET,HEAD,PUT,POST,DELETE作为一个request_type参数也会起作用。理由:BFG现在使用“视图谓词”来确定请求类型,而不是依赖于附加到请求对象的接口。未经zcml帮助而注册的视图
view指令现在负责执行自己的授权检查。这个
registry_manager可从“repoze.bfg.registry”导入的向后兼容性别名,由于repoze.bfg 0.9已被删除,已弃用。如果要在自己的调试脚本中使用注册表管理器,请使用“repoze.bfg.paster.get_app”和“repoze.bfg.scripting.get_root”API的组合。这个
INotFoundAppFactory接口已被删除;自repoze.bfg 0.9以来已弃用。如果您的configure.zcml::<utility provides="repoze.bfg.interfaces.INotFoundAppFactory" component="helloworld.factories.notfound_app_factory"/>
替换为如下内容:
<notfound view="helloworld.views.notfound_view"/>
有关详细信息,请参阅文档“Hook”一章中的“更改未找到视图”。
这个
IUnauthorizedAppFactory接口已被删除;自repoze.bfg 0.9以来已弃用。如果您的configure.zcml::<utility provides="repoze.bfg.interfaces.IUnauthorizedAppFactory" component="helloworld.factories.unauthorized_app_factory"/>
替换为如下内容:
<forbidden view="helloworld.views.forbidden_view"/>
有关详细信息,请参阅文档的“Hook”一章中的“更改禁止的视图”。
ISecurityPolicy-已删除自repoze.bfg 0.9以来已弃用的基于安全策略。如果你有这样的东西在你的configure.zcml,它将不再工作::<utility provides="repoze.bfg.interfaces.ISecurityPolicy" factory="repoze.bfg.security.RemoteUserInheritingACLSecurityPolicy" />
如果您的应用程序中存在如上所述的zcml,那么您将在启动时收到一个错误。而不是上面所说的,你需要像这样的东西:
<remoteuserauthenticationpolicy/> <aclauthorizationpolicy/>
这只是一个例子。有关配置安全策略的更多信息,请参阅repoze.bfg文档的“安全”一章。
注册身份验证或授权策略的自定义zcml指令(ala“authtktauthenticationpolicy”或“aclauthorizationpolicy”)应在zcml指令中“急切地”注册策略,而不是从zcml操作中注册。如果在延迟的ZCML处理过程中,视图机器在组件注册表中找不到身份验证或授权策略,则视图安全性将无法按预期工作。
1.0.1(2009年7月22日)¶
为添加了支持
has_resource,resource_isdir和resource_listdir到资源“overrideprovider”;这修复了一个bug,该bug的症状是,除非覆盖的原始目录中存在同名文件,否则无法覆盖资源目录中的文件。修复了文档错误,显示对来自
matchdict:它们存储为Article,而不是子项。修复了显示错误环境密钥的文档错误
matchdict由匹配的路由生成。为Python 2.6、2.6.1和2.6.2中的一个bug添加了一个解决方法,该错误与试图从Paste的FileApp提供静态文件时mimetypes模块中的递归错误有关:python.org。症状:文件“/usr/lib/python2.6/mimetypes.py,第244行,在guess_type return guess_type(url,strict)RuntimeError:超出了最大递归深度。感谢Armin Ronacher发现了症状并指出了解决方法。
根据反馈对教程进行少量编辑以提高准确性。
已声明粘贴和粘贴部署依赖项。
1.0(2009年7月5日)¶
重新测试并将一些内容添加到GAE教程中。
编辑了“扩展”叙事文档章节。
在遍历wiki教程的“定义模型”一章中添加了“删除数据库”部分。
对叙述和教程进行拼写检查。
1.0B2(2009年7月3日)¶
remoteuserauthenticationpolicyzcml指令没有environ_key指令(与文档不匹配)。固定
configure_zcml在Windows上检查filespec。以前,如果包括驱动器号的绝对文件系统路径作为filename(或)configure_zcml在选项中dict)torepoze.bfg.router.make_app,它将被视为一个包:资源名称规范。修复bfgwiki(traversal+zodb)和bfgwiki2(urldispatch+sa)教程中的错误和导入错误。
对所有tutorial setup.cfg文件使用bfgsite索引。
完整的文档语法/样式/拼写审核。
1.0b1(2009年7月2日)¶
特征¶
允许粘贴配置文件 (
configure_zcml)值或环境变量 (BFG_CONFIGURE_ZCML)命名将用于引导应用程序的ZCML文件(可选的包相关文件)。以前,集成器不能影响使用哪个zcml文件来执行bootstrapping(只有原始应用程序开发人员可以这样做)。
文档¶
在叙述性文档中添加了一个“资源”章节,解释了如何从另一个包重写一个包中的资源。
在叙述性文档中添加了“扩展”一章,解释了如何使用另一个python包和zcml扩展或修改现有的bfg应用程序。
1.0A9(2009年7月1日)¶
特征¶
使以“package-name:relative/path”的形式向API传递字符串成为可能,例如
render_template,render_template_to_response和get_template. 有时调用者所在的包是一个直接的命名空间包,因此返回的模块对于从中导航是半无用的。通过这种方式,调用者可以控制从何处查找内容的水平和垂直方向。
1.0A8(2009年7月1日)¶
废弃¶
贬低
authentication_policy和authorization_policy论据repoze.bfg.router.make_app. 相反,开发人员应该使用各种身份验证策略zcml指令 (repozewho1authenticationpolicy,remoteuserauthenticationpolicy和authtktauthenticationpolicy) aclauthorizationpolicy `授权策略指令,如“安全性”叙述性文档一章和wiki教程中所述。
特征¶
添加三个配置身份验证策略的新ZCML指令:
repozewho1authenticationpolicyremoteuserauthenticationpolicyauthtktauthenticationpolicy
添加一个新的zcml指令,用于配置名为
aclauthorizationpolicy.
漏洞修补¶
错误修复:当
repoze.bfg.resource.PackageOverrides类已实例化,它所覆盖的包已具有__loader__属性,它将在启动时失败,即使__loader__属性是另一个PackageOverrides实例。我们现在替换任何__loader__这也是PackageOverrides实例。症状:ConfigurationExecutionError: <type 'exceptions.TypeError'>: Package <module 'karl.views' from '/Users/chrism/projects/osi/bfgenv/src/karl/karl/views/__init__.pyc'> already has a __loader__ (probably a module in a zipped egg).
1.0A7(2009年6月30日)¶
特征¶
添加
reload_resources配置文件设置(即BFG_RELOAD_RESOURCES环境变量)。如果设置为true,则在目录资源覆盖(尤其是当前模板)之间移动文件时,不需要重新启动服务器。添加
reload_all配置文件设置(即BFG_RELOAD_ALL环境变量)这意味着reload_resources和reload_templates.这个
static帮助程序视图类现在使用PackageURLParser为了允许使用resourceZCML指令。这个PackageURLParser类已添加到(新)staticbfg中的模块;它是StaticURLParser班在paste.urlparser.这个
repoze.bfg.templating.renderer_from_cache函数现在检查reload_resources设置;如果为真,则不注册模板呈现器(它不会将注册表用作模板呈现器缓存)。
文档¶
添加
pkg_resources到术语表。更新“环境”文档以注意
reload_resources和reload_all.更新了
bfg_alchemy包含两个视图的粘贴模板:根视图显示指向记录的链接列表;记录视图显示该对象的详细信息。
内部的¶
注册itemplaterenderer时,使用冒号而不是制表符作为包名和relpath之间的分隔符,以形成“spec”。
注册A
repoze.bfg.resource.OverrideProvider当使用<resource>指令(性能)时,作为pkg_资源提供者,仅用于已知具有覆盖(而不是全局覆盖)的模块。
1.0A6(2009年6月29日)¶
漏洞修补¶
使用
caller_package函数而不是caller_module函数在templating为了避免在资源重写(实际上与文档匹配)中命名调用者模块。使用同一模块的子目录中的模板、直接存储在另一模块中的模板或存储在另一模块的子目录中的模板(实际上与文档匹配),可以覆盖直接存储在模块中的模板。
1.0A5(2009年6月28日)¶
特征¶
存在名为“resource”的新ZCML指令。此zcml指令允许您用同一个包或另一个包中的其他模板覆盖包中的变色龙模板(包含模板和单个模板文件的目录)。这允许您“伪造”视图对模板的使用,使其检索不同于通过调用的相对路径实际命名的模板
render_template_to_response('templates/mytemplate.pt'). 例如,可以通过执行以下操作覆盖模板文件:<resource to_override="some.package:templates/mytemplate.pt" override_with="another.package:othertemplates/anothertemplate.pt" />
传递给“to-override”和“override-with”的字符串被命名为“规范”。规范中的冒号分隔符将包名与包相对目录名分隔开。冒号和以下相对路径是可选的。如果未指定,则重写将尝试解析从另一个包的目录到包中的每次查找。例如::
<resource to_override="some.package" override_with="another.package" />
包中的各个子目录也可以重写::
<resource to_override="some.package:templates/" override_with="another.package:othertemplates/" />
如果要用另一个目录重写一个目录,必须确保将斜杠附加到
to_override规范和override_with规范。如果未能在指向目录的规范末尾附加斜线,将得到意外的结果。不能用文件规范重写目录规范,反之亦然(如果尝试,将发生启动错误)。不能用资源本身重写资源(如果尝试,将发生启动错误)。
只有个人 包 资源可能被覆盖。重写将不会遍历重写包内的子包。这意味着,如果您想要同时覆盖这两个资源
some.package:templates和some.package.views:templates,您需要注册两个覆盖。规范中的包名称可以以点开头,这意味着包与zcml文件所在的包相对。例如::
<resource to_override=".subpackage:templates/" override_with="another.package:templates/" />
相同的覆盖
to_overrides规范可以在zcml中多次命名。各override_with路径将按照zcml中定义的顺序进行查询,形成覆盖搜索路径。资源重写实际上可以重写模板以外的资源。任何使用
pkg_resourcesget_resource_filename,get_resource_stream或get_resource_string当使用重写时,API将获取重写文件。但是,唯一使用pkg_resourcesbfg中的api是模板化的东西,所以我们只在这里调用模板重写。使用
pkg_resourcesAPI用于定位模板文件名,而不是使用os.path模块。这个
repoze.bfg.templating模块现在使用pkg_resources定位和注册模板文件,而不是使用绝对路径名。
1.0A4(2009年6月25日)¶
特征¶
原因
:segment在路由路径中匹配,以将Unicode解码的和URL去引号的值放入匹配值的matchdict中。以前,在matchdict中放置了一个非解码的非url引号字符串作为值。原因
*remainder在路径中匹配以放置 元组 在matchdict字典中,为了能够为遍历路径提供unicode解码值和url双引号值。以前,在matchdict中放置了一个非解码的非url引号字符串作为值。添加可选
max_age关键字值remember方法repoze.bfg.authentication.AuthTktAuthenticationPolicy;如果将此值传递给remember,生成的cookie将具有相应的最大期限值。
文档¶
将有关路径模式匹配语法的信息添加到URL调度叙述性文档中。
漏洞修补¶
制作
route_url生成期间替换URL引用段。其余部分不引用。
1.0A3(2009年6月24日)¶
实施变更¶
repoze.bfg不再依赖路由包来解释URL路径。所有已知存在path模式将继续与居住在repoze.bfg.urldispatch.<route>使用某些属性(不常见的属性)的zcml指令可能无法工作(请参见下面的“向后不兼容”)。
漏洞修补¶
model_url当传递一个由于路由匹配而生成的请求时,调用route.generate.GAE上的bfg不起作用,因为在
threading.local(症状:“不支持初始化参数”)。感谢迈克尔·伯恩斯坦的错误报告。
文档¶
在“混合应用”一章中添加了一个“角落案例”解释,解释在“错误”视图匹配时该做什么。
使用
repoze.bfg.url.route_url教程而不是路由中的APIurl_for应用程序编程接口。
特征¶
增加了
repoze.bfg.url.route_url应用程序编程接口。此API允许您根据<route>声明。有关更多信息,请参阅url分派叙述章节和“repoze.bfg.url”模块API文档。
向后不兼容¶
由于不使用路线,使用路线
url_forbfg应用程序中的API(正如之前的教程迭代所建议的那样)将不再有效。使用repoze.bfg.url.route_url方法。上的以下属性
<route>ZCML指令不再有效:encoding,static,filter,condition_method,condition_subdomain,condition_function,explicit或subdomains. 这些都是路线的特点。这个
<route>zcml指令不再支持<requirement>次指令。这是一个路线功能。
1.0A2(2009年6月23日)¶
漏洞修补¶
这个
bfg_routesalchemy由于测试和视图签名不匹配,粘贴模板应用程序测试失败。
特征¶
添加
view_for属性routeZCML指令。此属性应引用接口或类(所有for的属性viewZCML指令)。
文档¶
安装部分的条件文档(“如何安装Python解释器”)。
向后不兼容¶
这个
callback论证repoze.bfg.authentication名为的身份验证策略RepozeWho1AuthenticationPolicy,RemoteUserAuthenticationPolicy和AuthTktAuthenticationPolicy现在必须接受两个位置参数:每个参数接受的原始参数(userid或identity)加上第二个参数,即当前请求。抱歉,当没有“全局”数据库连接时,这是为查找组提供服务所必需的。
1.0A1(2009年6月22日)¶
特征¶
添加了一个名为
notfound. 此zcml指令可用于命名当请求无法解析为可调用视图时应调用的视图。例如::<notfound view="helloworld.views.notfound_view"/>
添加了一个名为
forbidden. 此zcml指令可用于命名应在找到请求的可调用视图时调用的视图,但由于授权失败而无法调用该视图。例如::<forbidden view="helloworld.views.forbidden_view"/>
允许视图 任选地 定义为只接受请求对象的可调用文件,而不是同时接受上下文和请求(仍然有效,并且始终有效)。以下类型用作此样式中的视图:
接受单个参数的函数
request,例如:def aview(request): pass
新旧风格的类
__init__接受的方法self, request,例如:def View(object): __init__(self, request): pass
具有
__call__接受的方法self, request,例如:def AView(object): def __call__(self, request): pass view = AView()
这很可能一直都是呼叫约定,就像请求一样
context由于已经是一个属性,并且由于URL调度而调用了视图,所以在参数中使用上下文并不是很有用。这是我的梦想。缓存调用方包全局中的绝对路径
repoze.bfg.path为了避免重复(昂贵)调用os.path.abspath。添加
reissue_time和timeout参数到repoze.bfg.authentication.AuthTktAuthenticationPolicy构造函数。如果这些都通过了,那么cookie将每隔一段时间被重置一次(从相同的更改中提取到repoze.who,最近)。与路由路由匹配相关的matchdict在请求时可用作
matchdict属性:request.matchdict. 如果没有匹配的路由,则此属性将为无。显示404个响应,稍微便宜一点
environ["PATH_INFO"]在NotFound结果页上,而不是完整计算的URL上。将LRU缓存实现移动到单独的包中 (
repoze.lru)遍历和URL调度的概念已经统一。现在可以使用与遍历“根工厂”和以前称为urldispatch“上下文工厂”的工厂相同的工厂。
当根工厂参数(作为第一个参数)传递给
repoze.bfg.router.make_app是None,A 违约 使用根工厂。这是为了支持将路由用作“根查找器”;它取代了存在默认值的想法。IRoutesContextFactory.这个 view ` ZCML声明和
repoze.bfg.view.bfg_viewdecorator现在接受一个额外的参数:route_name. 如果Aroute_name已指定,它必须与以前定义的名称匹配route语句。如果指定了该视图,则仅当该路由在请求期间匹配时才调用该视图。现在可以执行遍历 之后 一条路线匹配。使用模式
*traverse在一个<route>pathzcml中的属性,它匹配的路径余数将用作遍历路径。当任何路由定义匹配时,wsgi环境现在将包含一个键
bfg.routes.route(匹配的路由对象)和键bfg.routes.matchdict(调用route.match的结果)。
废弃¶
公用事业登记
repoze.bfg.interfaces.INotFoundView和repoze.bfg.interfaces.IForbiddenView现在已弃用。使用notfound和forbiddenZCML指令(有关更多信息,请参阅“Hook”一章)。这样的注册将继续工作,但是NotFound和Forbidden指令会做“额外的工作”,以确保由该指令命名的可调用文件可以被路由器调用,即使它是一个类或只请求参数的视图。
移除¶
这个
IRoutesContext,IRoutesContextFactory和IContextNotFound接口已从中删除repoze.bfg.interfaces. 这些都不是原料药。这个
repoze.bfg.urldispatch.RoutesContextNotFound,repoze.bfg.urldispatch.RoutesModelTraverser和repoze.bfg.urldispatch.RoutesContextURL类被删除。这些也不是API。
向后不兼容¶
感动了
repoze.bfg.push模块,实现了pushpage装饰师,分成一个单独的分配,repoze.bfg.pushpage. 使用这个装饰器的应用程序应该在将该分布添加到安装需求之后继续工作。不再支持通过iRequestFactory实用程序注册更改默认请求工厂(以前记录在“Hook”章节的“更改请求工厂”部分中)。由于统一了遍历和URL调度,生成请求的步骤很复杂,因此任何人都不太可能正确地覆盖它。对于那些只想修饰或修改请求的用户,使用一个新的RequestEvent订户(请参阅文档中的事件一章)。
这个
repoze.bfg.IRequestFactory接口已删除。为什么要看上面的子弹。路由“context factures”(在zcml中拼写为route语句的factory参数)现在必须期望wsgi environ作为单个参数,而不是一组关键字参数。他们可以通过询问环境来获得匹配字典。 ['bfg.routes.matchdict'] . 这是同一组关键字,以前在bfg 0.9及以下版本中传递给urldispatch“context factures”。
使用
@zope.component.adapterbfg视图函数上的装饰器不再工作。使用@repoze.bfg.view.bfg_viewdecorator将函数(或类)标记为视图。在环境中找到匹配路由对象的名称已从中更改
bfg.route到bfg.routes.route.找到根现在完成了 之前 在路由器中生成一个请求对象(并发送一个新的请求事件)(它以前是在之后执行的)。
添加
*path_info到路由不再更改使用URL调度匹配的请求的路径信息。此功能仅用于服务repoze.bfg.wsgi.wsgiapp2装修工做的不对;使用*subpath相反,现在。价值观
subpath,traversed和virtual_root_path附加到请求对象的现在总是元组而不是列表(性能)。
漏洞修补¶
这个
bfg_alchemy管道中名为“repoze.tm”的粘贴程序模板,而不是“repoze.tm2”,导致启动失败。根据路由器模块的旧概念移动用于注册IAuthenticationPolicy/iforBiddenView/inotfoundView的BBB逻辑
make_app函数转换为repoze.bfg.zcml.zcml_configure可调用,以服务与使用“zope.configuration.xmlconfig”的脚本的兼容性(替换为repoze.bfg.zml.zcml_configure必要时获取BBB逻辑)
文档¶
将与如何创建身份验证策略和授权策略相关的接口文档添加到“安全”叙述章节。
在叙述性文档中添加了一个(相当悲哀的)“结合遍历和URL调度”章节。这就解释了
*traverse和*subpath在路由URL模式中。增加了一个“路由器”章节,解释了高级别的请求/响应生命周期。
用“根工厂”(已废弃上下文工厂)的等效解释替换了所有关于路由“上下文工厂”的提及和解释。
更新了routes bfgwiki2教程,以反映上下文工厂现在不再使用的事实。
0.9.1(2009年6月2日)¶
特征¶
添加API命名
repoze.bfg.settings.get_settings它检索作为options价值repoze.bfg.router.make_app. 应该首选此API,而不是使用getutility(isettings)。我添加了一个新的repoze.bfg.settingsAPI文档。
漏洞修补¶
还原了在0.9中意外删除的bfg_alchemy paster模板缺少的入口点声明。
文档¶
修复对的引用
wsgiapp在wsgiapp2API文档repoze.bfg.wsgi模块。
API移除¶
这个
repoze.bfg.location.locateAPI被删除了:它做的还不够有用,而且有一个误导性的名字。
0.9(2009年6月1日)¶
漏洞修补¶
无法注册自定义
IRoutesContextFactory作为默认上下文工厂使用,如“hooks”一章中所述。
特征¶
这个
request_typezcml的参数view声明和bfg_view装饰器现在可以是字符串之一GET,POST,PUT,DELETE或HEAD而不是对从中导入的各个接口类型的引用repoze.bfg.interfaces.这个
routezcml指令现在接受request_type作为它的别名condition_method对称性的论证view指令。这个
bfg_routesalchemyPaster模板现在提供了一个单元测试,并在视图呈现期间实际使用数据库。
移除¶
去除
repoze.bfg.threadlocal.setManager. 它只在单元测试中使用。去除
repoze.bfg.wsgi.HTTPException,repoze.bfg.wsgi.NotFound和repoze.bfg.wsgi.Unauthorized. 这些课程由于引入了IUnauthorizedView和INotFoundView机械。
文档¶
在叙述性模板章节中添加关于如何使用变色龙文本模板的说明。
将视图叙述章节更改为使用方法字符串而不是接口类型,并将高级接口类型用法移动到事件叙述章节。
添加了一个routes+sqlachemy wiki教程。
0.9A8(2009年5月31日)¶
特征¶
现在可以注册自定义
repoze.bfg.interfaces.INotFoundView对于给定的应用程序。此功能将替换repoze.bfg.interfaces.INotFoundAppFactory先前在“Hook”一章中介绍的功能。当框架检测到由于请求而完成的视图查找失败时,将调用InotfoundView;它应该接受上下文对象和请求对象;它应该返回一个IResponse对象(基本上是WebOB响应)。更多信息请参见BFG文档的Hooks叙述章节。路由器调用的视图返回非响应对象时出现的错误现在包括视图的名称,用于故障排除。
漏洞修补¶
对于禁止和未找到的视图,将发出“新响应”事件。
废弃¶
这个
repoze.bfg.interfaces.INotFoundAppFactory接口已被弃用,取而代之的是使用repoze.bfg.interfaces.INotFoundView
更名¶
更名
repoze.bfg.interfaces.IForbiddenResponseFactory到repoze.bfg.interfaces.IForbiddenView.
0.9A7(2009年5月30日)¶
特征¶
从中删除“context”参数
effective_principals和authenticated_userid中的函数APIrepoze.bfg.security有效地将“做”还原为0.8和“做”之前的行为。两个函数现在再次接受request参数。
0.9A6(2009年5月29日)¶
文档¶
将“bfg wiki”教程更改为使用authtktauthenticationpolicy而不是repoze.who。
特征¶
添加AuthtktAuthenticationPolicy。此策略从应用程序本身管理的身份验证cookie中检索凭据(而不是依赖上游数据源获取身份验证数据)。有关详细信息,请参阅文档的安全API章节。
允许远程用户身份验证策略和repozewho1身份验证策略接受各种构造函数参数。有关详细信息,请参阅文档的安全API章节。
0.9A5(2009年5月28日)¶
特征¶
添加
get_appAPI函数paster模块。这将从给定配置文件名和节名的配置文件中获取wsgi应用程序。见repoze.bfg.paster有关详细信息,请参阅API文档。添加名为的新模块
scripting. 它包含一个get_rootAPI函数,它提供了一个路由器实例,返回一个遍历根对象和一个“closer”。见repoze.bfg.scripting更多信息请参阅API文档。
0.9A4(2009年5月27日)¶
漏洞修补¶
尝试检查“旧式”安全策略 之后 我们解析zcml(thinko)。
0.9A3(2009年5月27日)¶
特征¶
允许通过zcml注册覆盖iauthenticationpolicy和iauthorizationpolicy(在router.py中注册后执行zcml分析)。
文档¶
在文档中添加了“bfg wiki”教程;它描述了如何通过身份验证创建基于遍历的zodb应用程序。
废弃¶
增加进口折旧
ACLSecurityPolicy,InheritingACLSecurityPolicy,RemoteUserACLSecurityPolicy,RemoteUserInheritingACLSecurityPolicy,WhoACLSecurityPolicy和WhoInheritingACLSecurityPolicy从repoze.bfg.security模块;同时(为了向后兼容目的),这些活动在repoze.bfg.secpols模块。但是请注意,“安全策略”的整个概念在bfg中已被弃用,取而代之的是单独的身份验证和授权策略,因此即使您开始使用repoze.bfg.secpols.repoze.bfg.secpols将在以后的版本中消失repoze.bfg.
已弃用导入别名删除¶
去除
repoze.bfg.template模块。自0.3.8以来,此包中的所有导入都已弃用。相反,进口get_template,render_template和render_template_to_response从repoze.bfg.chameleon_zpt模块。删除的向后兼容性导入别名
repoze.bfg.traversal.split_path(自0.6.5起已弃用)。现在必须将此导入为repoze.bfg.traversal.traversal_path)删除的向后兼容性导入别名
repoze.bfg.urldispatch.RoutesContext(自0.6.5起已弃用)。现在必须将此导入为repoze.bfg.urldispatch.DefaultRoutesContext.已删除的向后兼容性导入别名
repoze.bfg.router.get_options和repoze.bfg.router.Settings(自0.6.2起已弃用)。这两个都必须从repoze.bfg.settings.已删除的向后兼容性导入别名
repoze.bfg.interfaces.IRootPolicy(自0.6.2起已弃用)。它必须作为repoze.bfg.interfaces.IRootFactory现在。已删除的向后兼容性导入别名
repoze.bfg.interfaces.ITemplate(自0.4.4起已弃用)。它必须作为repoze.bfg.interfaces.ITemplateRenderer现在。已删除的向后兼容性导入别名
repoze.bfg.interfaces.ITemplateFactory(自0.4.4起已弃用)。它必须作为repoze.bfg.interfaces.ITemplateRendererFactory现在。已删除的向后兼容性导入别名
repoze.bfg.chameleon_zpt.ZPTTemplateFactory(自0.4.4起已弃用)。这必须作为导入repoze.bfg.ZPTTemplateRenderer现在。
0.9A2(2009年5月27日)¶
特征¶
添加了一个名为“bfgshell”的粘贴程序命令。此命令可用于获取全局命名空间中bfg根对象的交互式提示。例如。::
bin/paster bfgshell /path/to/myapp.ini myapp
见
Project有关更多信息,请参阅BFG文档中的章节。
废弃¶
名字
repoze.bfg.registry.registry_manager不是API,但在野外的脚本使用它来设置一个环境,以便在调试shell下使用。为此添加了向后兼容填充程序,但该功能已被弃用。
0.9A1(2009年5月27日)¶
特征¶
名为的新API函数
forget和remember在security模块。这个forget函数返回头,当在响应中设置时,将导致当前已验证的用户注销。这个remember函数(传递正确的参数时)将返回头,这将导致在响应中设置主体时“登录”。有关更多信息,请参阅文档的安全API章节。新的关键字参数
repoze.bfg.router.make_app已添加呼叫:authentication_policy和authorization_policy. 它们应该分别是身份验证策略的实现(实现repoze.bfg.interfaces.IAuthenticationPolicy接口)和授权策略的实现(对象实现repoze.bfg.interfaces.IAuthorizationPolicy). 身份验证策略的具体实现存在于repoze.bfg.authentication. 授权策略的具体实现存在于repoze.bfg.authorization.两个
authentication_policy和authorization_policy默认为None.如果
authentication_policy是None,但是authorization_policy是 notNone然后authorization_policy被忽略(进行授权的能力取决于身份验证)。如果
authentication_policy论证是 notNone和authorization_policy论点 isNone,授权策略默认为使用ACL的授权实现。 (repoze.bfg.authorization.ACLAuthorizationPolicy)我们不再像以前那样鼓励使用zcml配置“安全策略”。
ISecurityPolicy. 这是因为通常需要使用paste.ini参数配置具体授权或身份验证策略的设置;应用程序的应用程序入口点是执行此操作的自然位置。以系统使用的适配器的方式添加了两个新的抽象:一个
IAuthorizationPolicy和一个IAuthenticationPolicy. 它们的组合(由securitypolicyZCML指令)取代ISecurityPolicy以前版本repoze.who中的抽象。API在repoze.who.security(如authentication_userid,effective_principals,has_permission,等等)已被更改以尝试使用这些新适配器。如果你用的是老年人ISecurityPolicy适配器,系统仍然可以工作,但使用这种策略时,它将打印拒绝警告。通过zcml注册的(内部)iviewPermission实用程序的调用方式已更改。它们现在是纯粹的适配器,返回布尔结果,而不是返回可调用的。反正你不应该用这些。;-)
IAuthenticationPolicy的新具体实现已添加到
repoze.bfg.authentication模块:RepozeWho1AuthenticationPolicy其中使用repoze.who从和检索身份验证数据的标识RemoteUserAuthenticationPolicy,它使用REMOTE_USER用于检索身份验证数据的wsgi环境中的值。IAuthorizationPolicy的新具体实施已添加到
repoze.bfg.authorization模块:ACLAuthorizationPolicy它使用acl继承来进行授权。现在可以注册自定义
repoze.bfg.interfaces.IForbiddenResponseFactory对于给定的应用程序。此功能将替换repoze.bfg.interfaces.IUnauthorizedAppFactory先前在“Hook”一章中介绍的功能。当框架检测到授权失败时,将调用iforbiddenResponseFactory;它应该接受一个上下文对象和一个请求对象;它应该返回一个IResponse对象(基本上是一个Webob响应)。请阅读以下几点了解更多信息,并参阅BFG文档的Hooks叙述章节了解更多信息。
向后不兼容¶
自定义未找到和禁止(nee'未经授权)的wsgi应用程序(注册为inotfoundappFactory和iunauthorizedappFactory的实用程序)可能依赖名为
message描述响应的环境。此密钥已重命名为repoze.bfg.message(根据wsgi规范,该规范要求环境扩展包含点)。
废弃¶
这个
repoze.bfg.interfaces.IUnauthorizedAppFactory接口已被弃用,取而代之的是使用repoze.bfg.interfaces.IForbiddenResponseFactory这个
view_execution_permittedAPI现在应该从repoze.bfg.security模块而不是repoze.bfg.view模块。这个
authenticated_userid和effective_principals蜜蜂属repoze.bfg.security用于只接受一个参数(请求)。他们现在接受两个论点 (context和request)仍然支持使用单个参数调用它们,但会发出一个拒绝警告。(注:此更改在0.9A7中恢复;意味着这些函数的0.9版本再次接受request只有,就像0.8及之前的版本)。现在不赞成使用“老式”安全策略(那些基于ISecurityPolicy的策略)。有关激活授权策略和身份验证策略的信息,请参阅文档的“安全”章节。
0.8.1(2009-05-21)¶
特征¶
类对象现在可以用作视图可调用文件(通过zcml和通过使用
bfg_viewPython2.6中的decorator作为类decorator)。使用类作为视图可调用时的调用语义类似于使用类作为zope“浏览器视图”:类__init__必须接受两个位置参数(常规命名context和request)结果实例必须是可调用的(它必须具有__call__方法)。调用时,实例应返回响应。例如::from webob import Response class MyView(object): def __init__(self, context, request): self.context = context self.request = request def __call__(self): return Response('hello from %s!' % self.context) See the "Views" chapter in the documentation and the ``repoze.bfg.view`` API documentation for more information.删除了zcml操作的酸洗(编写的代码
configure.zcml.cache旁边configure.zcml项目中的文件)。当用户在命令(例如@bfg_view)注册和声明性注册(例如viewzcml)中的指令。在一个中等大小的项目中(535个zcml操作和15个zcml文件),执行从pickle读取的操作只节省了大约200毫秒(2.5秒与平均2.7秒)。对于非常小的项目(1个zcml文件和4个操作),启动时间是可比的,有时从pickle读取时甚至会变慢,而且这两种方法都非常快,以至于它实际上并不重要。
0.8(2009年5月18日)¶
特征¶
增加了一个
traverse函数到repoze.bfg.traversal模块。此函数可用于检索路径解析期间计算的某些值。有关此函数的更多信息,请参阅文档的遍历API章节。
废弃¶
内部:
ITraverserCallables现在应该返回字典而不是元组。在0.7.0之前,假设所有iTravers返回3元组。在0.7.1中,假设iTravers返回6元组。根据证据,我们可能需要向可调用的itraverer的返回值添加更多信息,0.8假设itraverer返回一个包含某些元素的字典。见repoze.bfg.interfaces.ITraverser字典中应存在的键列表的接口。ITraversers哪一个返回元组仍然有效,尽管会发出一个拒绝警告。
向后不兼容¶
如果您的代码直接使用itraverser接口(而不是通过API函数,例如
find_model)通过适配器查找,如果代码从默认的ModelGraphTraverser或RoutesModelTraverser适配器获取返回值,则需要更改代码以期望使用字典而不是3或6元组。
0.8A7(2009年5月16日)¶
向后不兼容¶
这个
RoutesMapper班在repoze.bfg.urldispatch已删除,以及其文档。从0.6.3开始就被弃用了。代码在repoze.bfg.urldispatch.RoutesModelTraverser它也被移除了。的语义
routezcml指令已简化。以前,假设要使用路由,需要将路由映射到外部注册的视图。新的route相反,指令具有view属性,指定可调用视图的点路径。当处理路由指令时,视图 注册的 使用route指令的name属性作为其名称,使用callable作为其值。这个view_name和provides的属性route因此不再使用指令。实际上,如果您以前使用route指令,这意味着您必须更改一对如下所示的zcml指令:<route name="home" path="" view_name="login" factory=".models.root.Root" /> <view for=".models.root.Root" name="login" view=".views.login_view" />
到如下所示的zcml指令:
<route name="home" path="" view=".views.login_view" factory=".models.root.Root" />
换句话说,要使旧代码工作,请删除
view仅为支持目的而存在的指令route指令,并移动它们view=属性到route指令本身。这一变化也要求
name的属性route现在需要指令。如果你以前用过route没有的指令name属性,您需要添加一个(名称是任意的,但必须是唯一的route和view陈述)。这个
provides的属性route指令也已被删除。该指令指定了一系列接口类型,生成的上下文将使用这些类型进行修饰。因为现在总是为单个接口生成路由视图 (repoze.bfg.IRoutesContext)与随意查找不同,不需要修饰任何上下文来确保找到视图。
文档¶
为添加了API文档
repoze.bfg.testing方法registerAdapter,registerUtiity,registerSubscriber和cleanUp.为“根工厂”添加了术语表条目。
注意到存在
repoze.bfg.pagetemplate在叙述性文档的“模板”一章的“可用附加模板系统绑定”中进行模板绑定。更新文档中的“模板”叙述章节(展开以显示示例模板和正确的宏示例)。
特征¶
有礼貌的卡洛斯·德·拉瓜迪亚补充道
alchemy粘贴模板。这个粘贴器模板设置了一个使用sqalchemy(使用sqlite)的bfg项目,并使用遍历来解析URL。(不使用路线)。此模板可通过paster create -t bfg_alchemy.路线
Route用于解析匹配的对象现在作为bfg.route当使用URL调度时。现在可以全局更改默认路由“上下文工厂”。请参阅文档的“zcml hooks”一章(在“更改默认路由上下文工厂”一节中)。
0.8A6(2009-05-11)¶
特征¶
增加了一个
routesalchemy粘贴模板。这个粘贴器模板建立了一个bfg项目,该项目使用sqalchemy(使用sqlite),并专门使用路由来解析URL(不使用遍历根工厂)。此模板可通过paster create -t bfg_routesalchemy.
文档¶
向url调度章节添加了有关如何使用zcml捕获根url的文档
route指令。在URL调度章节中添加了有关如何在请求结束时执行清理功能的文档(例如,关闭SQL连接)。
漏洞修补¶
在0.6.3版中,通过
get_root回调(根工厂)repoze.bfg.router.make_app变为可选(如果有)route声明是在ZCML中作出的。其目的是使完全废弃遍历成为可能,而完全依赖于URL调度(路由)来解析所有上下文。然而,一组复合的错误阻止了基于路由的根视图(一个响应“/”的视图)的使用。存在一个错误 repoze.bfg.urldispatch `另一个存在于路线本身。为了解决这个问题,修复了ulldispatch模块,并将一个分叉的路由主干放入名为
Routes-1.11dev-chrism-home. 分叉的源位于http://bitbucket.org/chrism/routes-home/(断开的链接);其内容已合并到路由主干(将是路由1.11)。
0.8A5(2009-05-08)¶
特征¶
添加了两个新的安全策略:RemoteUserInheritingClSecurityPolicy和WhoInheritingClSecurityPolicy。这些是考虑到的安全策略 all 在上下文的沿袭中定义的ACL,而不是在沿袭中找到的第一个ACL处停止。有关更多信息,请参阅API文档的“安全”一章。
处理安全性的API和叙述性文档被更改,以引入新的“继承”安全策略变体。
为“沿袭”添加了词汇表条目。
废弃¶
以前命名的安全策略
RepozeWhoIdentityACLSecurityPolicy现在有了一个更理智的名字WhoACLSecurityPolicy. 当以“旧”名称导入此策略时,将发出拒绝警告;这通常是由于它在应用程序中的zcml中使用。如果您收到此拒绝警告,请更改ZCML以使用新名称,例如更改:<utility provides="repoze.bfg.interfaces.ISecurityPolicy" factory="repoze.bfg.security.RepozeWhoIdentityACLSecurityPolicy" />
到:
<utility provides="repoze.bfg.interfaces.ISecurityPolicy" factory="repoze.bfg.security.WhoACLSecurityPolicy" />
0.8A4(2009年5月4日)¶
特征¶
zope.testing不再是直接依赖,尽管我们的依赖(如zope.interface,repoze.zcml等等)仍然依赖它。在谷歌应用引擎上测试。在文档中添加了一个教程,解释如何将BFG应用程序部署到GAE。
向后不兼容¶
依赖的应用程序
zope.testing.cleanup.cleanUp在单元测试中仍然可以无限期地使用该函数。但是,为了获得最大的前向兼容性,它们应该导入cleanUp从repoze.bfg.testing而不是来自zope.testing.cleanup. bfg贴纸模板和文档已更改为使用此函数,而不是zope.testing.cleanup版本。
0.8a3(2009年5月3日)¶
特征¶
不需要成功导入
zope.testing在bfg应用程序运行时。这样我们就可以摆脱zope.testing在像gae这样有文件限制的平台上。
0.8A2(2009年5月2日)¶
特征¶
我们不再包括
configure.zcml的chameleon.zpt包装内configure.zcml在“repoze.bfg.includes”包中。一段时间以来,这一直是不允许的。这个
repoze.bfg.chameleon_zpt包不再从导入chameleon.zpt在模块范围内,在方法调用中将导入延迟到稍后。这个chameleon.zpt无法在GAE等平台上导入包。
0.8A1(2009年5月2日)¶
取消预测警告和导入别名删除¶
从0.6.1版开始,当名称
model_url是从导入的repoze.bfg.traversal模块。此导入别名(和取消预测警告)已被删除。任何输入model_url功能现在需要从repoze.bfg.url;名称的任何导入model_url从repoze.bfg.traversal现在会失败。这样做是为了删除对zope.deferredimport的依赖。从0.6.5版开始,当名称
RoutesModelTraverser是从导入的repoze.bfg.traversal模块。此导入别名(和取消预测警告)已被删除。任何输入RoutesModelTraverser现在需要从开始上课repoze.bfg.urldispatch;名称的任何导入RoutesModelTraverser从repoze.bfg.traversal现在会失败。这样做是为了删除对zope.deferredimport的依赖。
特征¶
本次发布
repoze.bfg是“C自由”。这意味着它不依赖于安装时必须从C源代码编译的任何软件。特别地,repoze.bfg不再依赖于lxml包。此更改引入了一些向后不兼容,如下面的“向后不兼容”部分所述。
此版本是在Windows XP上测试的。它看起来工作正常,所有的测试都通过了。
向后不兼容¶
与制造有关的不相容性 repoze.bfg “C自由”:
移除
repoze.bfg.chameleon_genshi模块,从而支持Genshi风格的变色龙模板。Genshi风格变色龙模板取决于lxml,它在C中实现(与纯Python相反),并且repoze.bfg从这个版本开始,核心是“无C”的。您可以通过安装repoze.bfg.chameleon_genshi套餐可从https://pypi.org/project/repoze.bfg.chameleon genshi/。所有依赖于chameleon_genshi此版本之前的模块repoze.bfg安装此加载项后应能正常工作。移除
repoze.bfg.xslt模块,从而支持XSL模板。这个repoze.bfg.xslt依赖的模块lxml,在C中实现,并且repoze.bfg从这个版本开始,核心是“无C”的。您可以通过安装repoze.bfg.xslt套餐可从http://svn.repoze.org/repoze.bfg.xslt/(断开链接)(也可在http://dist.repoze.org/bfg/0.8/simple)(断链)。所有依赖于xslt此版本之前的模块repoze.bfg安装此加载项后,应在不进行修改的情况下工作。移除
repoze.bfg.interfaces.INodeTemplateRenderer接口和从该接口到repoze.bfg.interfaces.INodeTemplate. 现在必须从repoze.bfg.xslt.interfaces安装后的包装repoze.bfg.xslt如上所述的附加组件包repoze.bfg.interfaces.INodeTemplateRenderer. 这个接口从来不是任何公共API的一部分。
其他向后不兼容:
这个
render_template中的函数repoze.bfg.chameleon_zpt返回Unicode而不是字符串。同样,ITerable返回的单个值由render_template_to_iterable函数也是每个Unicode。这实际上是从我们新使用的chameleon.core1.0B32(非LXML依赖版本)和chameleon.zpt1.0B16+;chameleon.zptpageTemplateFile实现用于返回字符串,但现在返回Unicode。
0.7.1(2009-05-01)¶
特征¶
“Paster Create”模板已经修改为使用新的“bfg.repoze.org”和“docs.repoze.org”网站的链接。
在“虚拟主机文档”一章的URL前缀处添加了更好的虚拟主机文档。
的接口
repoze.bfg.interfaces.ITraverser以及实现接口的内置实现 (repoze.bfg.traversal.ModelGraphTraverser和repoze.bfg.urldispatch.RoutesModelTraverser)现在期待__call__itraverser的方法返回3个附加参数:traversed,virtual_root和virtual_root_path(旧合同是__call__返回了ITraverser的方法;三个参数,契约new返回了6个)。traversed将是经过遍历的Unicode名称序列(包括虚拟根路径,如果有的话),或者None如果没有执行遍历,virtual_root将是表示虚拟根的模型对象(如果未执行遍历,则为物理根),并且virtual_root_path将是表示虚拟根路径(Unicode名称序列)的序列,或者None如果没有执行遍历。六个论点现在从bfg itraverers返回。它们按以下顺序返回:
context,view_name,subpath,traversed,virtual_root和virtual_root_path.bfg代码中调用itraverser的地方继续接受一个3参数的返回值,尽管bfg将在遇到警告时生成并记录警告。
请求对象现在具有以下属性:
traversed(遍历的名称序列或None如果没有执行遍历,virtual_root(表示虚拟根的模型对象,包括虚拟根路径(如果有)),以及virtual_root_path(表示虚拟根路径的名称序列或None如果没有执行遍历)。一个叫
wsgiapp2已添加到repoze.bfg.wsgi模块。这个装饰器的功能与repoze.bfg.wsgi.wsgiapp但它修复了SCRIPT_NAME和PATH_INFO调用wsgi子应用程序之前的环境值。这个
repoze.bfg.testing.DummyRequest对象现在具有的默认属性traversed,virtual_root和virtual_root_path.当match dict中的元素被命名时,routesModelTraverser现在的行为更像routes“routesMiddleware”对象。
path_info(通常当有一个模式http://foo/*path_info)在这种情况下,PATH_INFO环境变量设置为match dict中的值,并且SCRIPT_NAME以原始文件的前缀附加到PATH_INFO不包括新变量的值。NotFound调试现在也显示了遍历路径、虚拟根路径和虚拟根路径。
加速/澄清“遍历”模块的“模型路径”、“模型路径元组”和“模型路径列表”功能。
向后不兼容¶
在以前的版本中,
repoze.bfg.url.model_url,repoze.bfg.traversal.model_pathandrepoze.bfg.traversal.model_path_tuplefunctions always ignored the__name__argument of the root object in a model graph ( effectively replacing it with a leading/in the returned value) when a path or URL was generated. The code required to perform this operation was not efficient. As of this release, the root object in a model graph must have a `` _ name_uu``属性None或空字符串 ('')以便从这些API正确生成URL和路径。如果根模型对象具有__name__参数不是这些值之一,您需要更改代码,以便正确生成URL和路径。如果模型图的根节点带有字符串__name__不为空,值为__name__将为生成的每个路径和URL预先设置。这个
repoze.bfg.location.LocationProxy类与repoze.bfg.location.ClassAndInstanceDescr为了最终摆脱对zope.proxy. 这些类都不是API。在所有早期版本中,
repoze.bfg.location.locate函数的工作方式是这样的:如果模型没有显式地提供repoze.bfg.interfaces.ILocation接口,locate返回ALocationProxy对象表示model用它__parent__分配给的属性parent和A__name__分配给的属性__name__. 在这个版本中,repoze.bfg.location.locate函数仅阻塞__name__和__parent__无条件地将属性赋给所提供的模型,无论对象是否实现iLocation,并且它从不返回代理。这是因为locationProxy行为现在已移动到加载项包中。 (repoze.bfg.traversalwrapper,以便最终能够摆脱对zope.proxy.在所有以前的版本中,默认情况下,如果使用了遍历(而不是URL调度),并且根对象提供了``repoze.bfg.interfaces.ilocation``接口,但子对象通过
__getitem__返回一个未实现同一接口的对象,repoze.bfg在遍历期间提供了一些隐式帮助。此遍历功能从未实现的根(及其后)包装子对象ILocation在自动向其提供__name__和__parent__基于要遍历的名称和上一个对象的属性。此功能现在已从基础中删除repoze.bfg为了最终摆脱对zope.proxy.为了重新启用无法更改的旧应用程序的包装行为,请注册“TraversalWrapper”
ModelGraphTraverser作为遍历策略,而不是默认策略ModelGraphTraverser. 要使用此功能,您需要安装repoze.bfg.traversalwrapper软件包(附加软件包,可从https://pypi.org/project/repoze.bfg.traversalwrapper/)然后更改应用程序的configure.zcml包括以下章节:- <适配器
factory=“repoze.bfg.traversalwrapper.modelgraphtraverser”为=“*”/>
如果使用此ITraverFactory而不是默认值,则图表中的任何对象(甚至根对象)都不能提供
__name__或__parent__属性。即使子对象从根返回 do 实现iLocation接口,这些接口仍将包装在重写对象的“real”的代理中。__parent__和__name__属性。另请参见文档的“模型”章节的更改(在“位置感知模型实例”部分中)。
0.7.0(2009-04-11)¶
漏洞修补¶
修复错误
repoze.bfg.wsgi.HTTPException:内容长度返回为int而不是字符串。在上添加显式依赖项
zope.deferredimport,zope.deprecation和zope.proxy出于向前兼容的原因 (zope.component将不再依赖zope.deferredimport很快,尽管我们直接使用它,但它只是一个可传递的依赖项,以及“zope.deprecation”,zope.proxy直接使用,即使它们也是可传递的依赖项)。使用
model_url或model_path针对损坏的模型图(其中一个模型具有非根模型__name__属于None)导致引发无法解释的错误:(如果不是)_must_quote[cachekey].search(s): TypeError: expected string or buffer)现在,针对中间节点中没有名称的图生成的URL和路径将用空字符串替换none,因此不会引发错误。当然,URL或路径仍然是假的。
特征¶
使
testing.DummyTemplateRenderer返回一些非默认字符串表示形式。增加了一个新的
anchor关键字参数model_url. 如果anchor如果存在,则其字符串表示形式将用作生成的URL中的命名锚(例如,如果anchor传递为foo模型URL是http://example.com/model/url,生成的URL将http://example.com/model/url#foo)
向后不兼容¶
默认的请求字符集编码现在是
utf-8. 因此,当通过以下方式获取值时,请求机器将尝试自动将UTF-8编码中的值解码为Unicoderequest.params,request.GET和request.POST. bfg以前的行为是在以这种方式访问值时返回一个bytestring。这种更改将破坏应用程序中的表单处理代码,这些应用程序依赖于被字符串考虑的那些API的值。如果要手动解码应用程序中表单提交的值,则需要更改执行此操作的代码,以期望Unicode值来自request.params,request.GET和request.POST或者您需要显式地重新启用以前的行为。若要重新启用以前的行为,请将以下内容添加到应用程序的configure.zcml::<subscriber for="repoze.bfg.interfaces.INewRequest" handler="repoze.bfg.request.make_request_ascii"/>
另请参阅BFG文档“视图”一章中题为“使用视图处理表单提交(Unicode和字符集问题)”的文档。
文档¶
在“叙述性视图”一章中添加一节,标题为“使用视图处理表单提交(Unicode和字符集问题)”,解释表单数据值的隐式解码。
0.6.9(2009年2月16日)¶
漏洞修补¶
LRU缓存在并发性下不稳定(大惊喜!)当它试图在缓存中重新删除已删除的密钥时。症状:第64行输入:del数据 [奥尔基] :keyror:“/some/path”。现在,如果不能删除键(它已经被删除),我们就忽略键错误。
使用生成URL时模型路径中的空位置名
repoze.bfg.model_url基于通过遍历获得的模型,在生成的URL中不再被忽略。这意味着如果非根模型对象具有__name__属于'',URL将反映它(例如model_url将生成http://foo/bar//baz如果对象具有__name__属于''是Bar的子级和Baz的父级)。但是,模型图遍历器在请求进入时(遍历器除去空路径段名称),仍然无法解析由空路径段生成的URL。
特征¶
小孢子
repoze.bfg.traversal.model_path,repoze.bfg.traversal.model_path_tuple,repoze.bfg.traversal.quote_path_segment和repoze.bfg.url.urlencode.将zip_safe=false添加到setup.cfg。
文档¶
向添加注释
repoze.bfg.traversal.quote_path_segment关于缓存计算值的API文档。
实施变更¶
简化
repoze.bfg.traversal.TraversalContextURL.__call__(现在使用repoze.bfg.traversal.model_path而不是滚动自己的路径生成)。
0.6.8(2009年2月5日)¶
向后不兼容¶
这个
repoze.bfg.traversal.model_pathAPI now returns a quoted string rather than a string represented by series of unquoted elements joined via/characters. Previously it returned a string or unicode object representing the model path, with each segment name in the path joined together via `` /字符,例如 ``/foo /bar. 现在它返回一个字符串,其中每个段都是一个UTF-8编码的、带URL引号的元素,例如/foo%20/bar. 此更改(如repose dev maillist中简要讨论的)是容纳模型对象所必需的,这些对象本身具有__name__包含/性格。对于没有高阶Unicode模型的人
__name__属性或__name__属性的值需要在其模型图中引用URL,这不会导致任何问题。但是,如果您有当前期望的代码model_path要返回一个未加引号的字符串,或者您有一个现有的应用程序,其中包含通过旧方法生成的数据,并且您太懒于更改任何内容,您可能希望替换导入的BFG。model_path在您使用此函数的代码中(这是“旧”的代码model_path实施)::from repoze.bfg.location import lineage def i_am_too_lazy_to_move_to_the_new_model_path(model, *elements): rpath = [] for location in lineage(model): if location.__name__: rpath.append(location.__name__) path = '/' + '/'.join(reversed(rpath)) if elements: suffix = '/'.join(elements) path = '/'.join([path, suffix]) return path
这个
repoze.bfg.traversal.find_modelAPI不再将作为Unicode对象传递给它的完整路径的Unicode表示形式隐式转换为UTF-8字符串。调用方应使用由repoze.bfg.traversal.model_path或由结果返回的元组值repoze.bfg.traversal.model_path_tuple或者他们应该使用有关传递字符串的准则path中描述的参数find_modelAPI文档。
错误修正¶
中包含的每个参数
elementspassed torepoze.bfg.traversal.model_pathwill now have any/characters contained within quoted to `` %2f``在返回的字符串中。以前,/元素中的字符没有加引号(错误)。
特征¶
A
repoze.bfg.traversal.model_path_tuple添加了API。此API是model_path(返回字符串);model_path_tuple以元组形式返回模型路径(与Zope的非常类似getPhysicalPath)A
repoze.bfg.traversal.quote_path_segment添加了API。此API将引用单个路径段(字符串或Unicode对象)。见repoze.bfg.traversal有关更多信息,请参阅API文档。这个
repoze.bfg.traversal.find_modelAPI现在接受“路径元组”(请参见上面关于model_path_tuple)以及字符串路径表示(从repoze.bfg.traversal.model_path作为一个path参数。添加 ` ` renderer``参数(默认为无)到
repoze.bfg.testing.registerDummyRenderer. 例如,这使得注册在单元测试中引发异常的自定义呈现器成为可能。
实施变更¶
已将“url”引号函数移回
repoze.bfg.traversal从repoze.bfg.url. 这不是API。
0.6.7(2009年1月27日)¶
特征¶
这个
repoze.bfg.url.model_urlAPI现在可以处理从路由URL调度派生的上下文。 (Routes.util.url_for被称为引擎盖下)。已添加对基于遍历的应用程序的“虚拟根”支持。当您希望在
repoze.bfg将图形作为URL路径名下的应用程序建模,该路径名不包括模型路径本身。有关详细信息,请参阅文档中的(新)“虚拟主机”一章。A
repoze.bfg.traversal.virtual_root已添加API。调用时,它返回虚拟根对象(如果未指定虚拟根,则返回物理根对象)。
实施变更¶
repoze.bfg.traversal.RoutesModelTraverser已移至repoze.bfg.urldispatch.model_url现在,通过基于上下文和请求的适配器查找来执行URL生成。ZCML,它为
IContextURL接口已添加到中的configure.zcmlrepoze.bfg.includes.
0.6.6(2009年1月26日)¶
实施变更¶
有一个间接的
repoze.bfg.url.model_url现在,它咨询一个实用程序来生成基本模型URL(没有额外的元素或查询字符串)。最终,这将为虚拟主机服务;目前,它是无文件的,不应该被钩住。
0.6.5(2009-01-26)¶
特征¶
您现在可以覆盖未找到和未经授权的响应
repoze.bfg在找不到视图或由于缺少权限而无法调用视图时生成。有关更多信息,请参阅文档中的“ZCML Hook”一章。在文档中添加了routes zcml指令属性解释。
增加了一个
traversal_path遍历模块的API;请参阅文档中的“遍历”API章节。这是一个以前称为split_path这不是API,但人们无论如何都在使用它。不像split_path它现在返回一个元组而不是一个列表(因为它的值是缓存的)。
行为改变¶
这个
repoze.bfg.view.render_view_to_response如果它调用的视图函数返回的对象不具有某些属性,则API将不再引发ValueError。 (headerlist,app_iter,status)此API用于尝试使用is_response中的函数repoze.bfg.view提出了一个ValueError如果is_response检查失败。现在,调用者的职责是确保视图函数的返回值是“真实”响应。传递给的wsgi environ dicts
repoze.bfg的路由器现在必须包含一个请求方法键/值;如果不包含,则会引发一个键错误(速度)。不再允许将主体的“嵌套”列表传递给
repoze.bfg.ACLAuthorizer.permits(例如)['fred', ['larry', 'bob']])主体列表必须完全展开。这个特性从未被记录,也从未是API,所以它不是向后不兼容的。不再允许安全ACE包含“嵌套”权限列表(例如 ``(Allow, Everyone, ['read', ['view', ['write', 'manage']]])`)`. The list must instead be fully expanded (e.g. `` (允许,所有人, [“读取”、“查看”、“写入”、“管理”] “”。这个特性从未被记录,也从未是API,所以它不是向后不兼容的。
这个
repoze.bfg.urldispatch.RoutesRootFactory现在注入wsgiorg.routing_args路由匹配时,环境变量进入环境。这是一个((),路由参数)的元组,其中路由参数是从路由映射器匹配返回的值(“match dict”)。这个
repoze.bfg.traversal.RoutesModelTraverser类现在想获得view_name和subpath从wsgiorgs.routing_args环境变量。为了向后兼容,它返回到从上下文中获取这些内容。
实施变更¶
摆脱
repoze.bfg.security.ACLAuthorizer:ACLSecurityPolicy现在做它所做的内联。摆脱
repoze.bfg.interfaces.NoAuthorizationInformation例外:它仅由ACLAuthorizer.使用本地的NotFound错误而不是
webob.exc.HTTPNotFound(后者很慢)。使用本地未经授权的错误而不是
webob.exc.Unauthorized(后者很慢)。这个
repoze.bfg.lru.lru_cacheddecorator现在使用functools.wrapps以使LRU缓存函数的文档成为可能。各种速度微调。
漏洞修补¶
repoze.bfg.testing.DummyModel没有一个get方法;现在可以了。
0.6.4(2009年1月23日)¶
向后不兼容¶
这个
unicode_path_segments配置变量和BFG_UNICODE_PATH_SEGMENTS配置变量已被删除。路径段现在总是传递给模型__getitem__方法为Unicode。”自0.5.4以来,“真”是此设置的默认值,但是将此配置设置更改为“假”允许您返回到将原始路径元素字符串传递给模型__getitem__方法。移除这个旋钮可以实现一个速度目标(通过移除检查,我们可以获得+80 req/s),而且更清楚的是,在模型中总是期望unicode路径段__getitem__方法。
实施变更¶
repoze.bfg.traversal.split_path现在还处理将路径段解码为Unicode(为了提高速度,因为它的结果是缓存的)。repoze.bfg.traversal.step做了一个方法ModelGraphTraverser。
使用“预编好的”请求子类(例如
repoze.bfg.request.GETRequest)与中的HTTP请求方法相对应的router.py构造请求对象而不是使用alsoProvides将适当的接口附加到未经bclassed的webob.Request. 此模式纯粹是一种优化(例如,阻止调用alsoProvides指MacBook 2GHz上590 r/s和690 r/s之间的差异)。通过更改路由器来梳理额外的4%的性能提升;不要使用导入的ZCA API,而是直接对路由器的属性注册表使用相同的API。
bfg使用的注册表现在是
zope.component.registry.Components(定义为repoze.bfg.registry.Registry)它有一个notify方法,AregisterSubscriptionAdapter和AregisterHandler方法。如果没有订户通过注册registerHandler或registerSubscriptionAdapter,notify是速度的一个转折点。允许和拒绝的课程
repoze.bfg.security现在对于构建一个关于速度的原因消息的表示更加懒惰;repoze.bfg.view_execution_permitted利用这一点。这个
is_response检查速度加快了一半左右,代价是使代码稍微变丑。
新模块¶
repoze.bfg.lru实现一个LRU缓存类和一个内部使用的修饰符。
0.6.3(2009年1月19日)¶
漏洞修补¶
雷丁
root_policy路由器对象上的属性(作为返回iRotFactory实用程序的属性)。它在0.6.2中被无意中移除。野外的代码取决于它的存在(特别是脚本和“调试”助手)。
特征¶
URL调度已经过大修:不再需要在应用程序的可调用入口点中手动创建一个RoutesMapper,以便使用URL调度(aka Routes )一个新的
route指令已添加到zcml指令的可用列表中。各route插入到应用程序的configure.zcml建立路由映射器连接。如果有的话route声明是通过zcml在特定的应用程序中进行的,get_root可调用传入到repoze.bfg.router.make_app将自动包装在相当于routesmapper的文件中。此外,新的route指令允许指定context_interfaces路由的属性,当路由指定context_interfaces属性匹配。一种新的接口
repoze.bfg.interfaces.IContextNotFound加入。当路由找不到匹配项并且没有使用遍历的“fallback”get_root callable时,此接口将附加到生成的“dummy”上下文。这个
bfg_starter和bfg_zodb“Paster Create”模板现在包含图像和CSS,在初始项目生成后显示默认页面时显示这些图像和CSS。允许
repoze.bfg.view.static要传递给的助手root_path名称;它将被视为相对于调用它的文件。的功能
repoze.bfg.convention已合并到核心中。利用repoze.bfg.convention将继续无限期地工作,但建议应用程序停止依赖它。为此,替代进口repoze.bfg.convention.bfg_view随着进口repoze.bfg.view.bfg_view,并将zcml中的节从<convention package=".">到<scan package=".">. 合并的结果是,bfg增加了一个新的依赖项:martian.使用pushpage装饰器的视图函数现在是可pickle的(这意味着它们的使用不会阻止
configure.zcml.cache文件被写入磁盘)。而不是总是使用
webob.Request作为“请求工厂”(例如Router类)webob.Response以及“响应工厂”(例如render_template_to_response,允许通过zcml实用程序Hook重写这两个。有关更多信息,请参阅文档的“使用zcmlHook”一章。
废弃¶
类
repoze.bfg.urldispatch.RoutesContext已重命名为repoze.bfg.urldispatch.DefaultRoutesContext. 类应该根据需要使用新名称导入(尽管实际上它可能不应该从除bfg内部之外的任何地方导入,因为它不是API的一部分)。
实施变更¶
这个
repoze.bfg.wsgi.wsgiapp装饰器现在使用webob.Request.get_response做它的工作,而不是依赖于国产的wsgi代码。这个
repoze.bfg.view.static帮手现在用webob.Request.get_response做它的工作,而不是依赖于国产的wsgi代码。这个
repoze.bfg.urldispatch.RoutesModelTraverser类已移动到repoze.bfg.traversal.RoutesModelTraverser.这个
repoze.bfg.registry.makeRegistry函数已重命名为repoze.bfg.registry.populateRegistry现在接受registry参数(应该是zope.component.registry.Components)
文档添加¶
更新了叙述URLDispatch章节,其中包含
<route..>ZCML指令。在文档的url dispatch章节中添加一节“使用带有url调度的bfg安全性”。
更好地记录repoze.bfg附带的安全策略实现。
在叙述模板一章中增加了“在repoze.bfg中使用zpt宏”一节。
0.6.2(2009年1月13日)¶
特征¶
如果您有
nose安装在用于运行测试的解释器中。使用解释程序nose安装,做python setup.py nosetests在repoze.bfg包以查看测试覆盖率输出。增加了一个
post论据repoze.bfg.testing:DummyRequest建造师。补充
__len__和__nonzero__到repoze.bfg.testing:DummyModel.这个
repoze.bfg.registry.get_options可调用(现在重命名为repoze.bfg.setings.get_options)用于在返回的字典中仅返回框架特定的键和值。它现在返回它所传递的字典中的所有键和值 plus 从环境中选择的任何特定于框架的设置。作为副作用,所有特定于PasteDeploy应用程序的配置文件设置都作为ISettingsBFG内的公用设施。已将现有的bfg粘贴程序模板重命名为
bfg_starter. 添加了另一个模板 (bfg_zodb)显示默认的zodb安装程序,使用repoze.zodbconn.添加名为的方法
assert_给DummyTemplatenderer。此方法接受关键字参数。关键字参数中的每个键/值对都会导致断言渲染器接收到该键的值等于断言值。由粘贴模板生成的项目现在使用
DummyTemplateRenderer.assert_方法。使(内部)线程本地注册表管理器维护一组注册表,以便能够从内部调用一个BFG应用程序。
入口上的每个请求对象都附加了一个特定于HTTP动词(get/put/post/delete/head)的接口。HTTP谓词相关接口在中定义。
repoze.bfg.interfaces并且是IGETRequest,IPOSTRequest,IPUTRequest,IDELETERequest和IHEADRequest. 这些接口可以指定为request_typebfg视图声明的属性。只有使用与传入请求中的HTTP谓词匹配的请求类型定义视图时,才会找到命名特定HTTP谓词匹配接口的视图。更一般的IRequest接口可以用作捕获所有请求的请求类型(这确实是默认值)。所有请求实现IRequest. HTTP动词匹配思想是由 repoze.bfg.restrequest . 这个包不再需要了,但仍然可以正常工作。
漏洞修补¶
修复粘贴配置的错误
unicode_path_segments(和操作系统环境BFG_UNICODE_PATH_SEGMENTS)在某些情况下,可能一直违约为假。它现在总是默认为true,匹配文档和意图。这个
repoze.bfg.traversal.find_model当通过path参数,该参数是Unicode,并且在unicode_path_segments或BFG_UNICODE_PATH_SEGMENTS配置变量为“真”。添加了一个新模块:
repoze.bfg.settings. 这包含与部署设置相关的代码。
实施变更¶
这个
make_app可调用的repoze.bfg.router现在注册root_policy作为实用程序的参数(未命名,使用repoze.bfg.interfaces.IRootFactory而不是将它作为第一个参数传递给repoze.bfg.router.Router类。因此,repoze.bfg.router.RouterRouter类只接受一个参数:registry. 这个repoze.bfg.router.Router类现在通过实用工具查找来检索根策略。这个repoze.bfg.router.make_appAPI现在还执行一些以前在内部处理过的重要应用程序注册。repoze.bfg.registry.makeRegistry.
新模块¶
A
repoze.bfg.settings模块已添加。它包含与部署设置相关的代码。它包含的大多数代码都是从repoze.bfg.registry模块。
行为改变¶
这个
repoze.bfg.settings.Settings类(其实例注册为提供repoze.bfg.interfaces.ISettings当任何应用程序启动时)现在自动调用repoze.bfg.settings.get_options在传递给其构造函数的选项上。这意味着get_options在应用程序中make_app不再需要函数(“raw”options听写或不传)。清除试图从试图拔出的伤风中恢复的旧感冒。
z3c.pt模板;变色龙已经成为模板引擎很长一段时间了。运行repoze.bfg来对付已经腌制过的沙盒z3c.pt模板现在只会由于取消拾取错误而失败,但可以通过删除模板缓存文件来修复。
废弃¶
感动了
repoze.bfg.registry.Settings类。已将此移动到repoze.bfg.settings.Settings. 当从旧位置导入时,将发出拒绝警告。感动了
repoze.bfg.registry.get_options此功能已移动到repoze.bfg.settings.get_options. 当从旧位置导入时,将发出拒绝警告。这个
repoze.bfg.interfaces.IRootPolicy接口在接口包中被重命名。它已重命名为IRootFactory. 当从旧位置导入时,将发出拒绝警告。
0.6.1(2009年1月6日)¶
新模块¶
一个新的模块
repoze.bfg.url已添加。它包含了model_urlAPI(从repoze.bfg.traversal)以及urlencode(像 Python 一样)urllib.urlencode)它可以处理query参数。
废弃¶
这个
model_url函数已从移动repoze.bfg.traversal进入之内repoze.bfg.url. 它仍然可以从repoze.bfg.traversal但是从repoze.bfg.traversal将发出拒绝警告。
特征¶
A
static帮助程序类已添加到repoze.bfg.views模块。此类的实例愿意充当使用磁盘上的文件返回静态资源的BFG视图。见repoze.bfg.view获取更多信息。这个
repoze.bfg.url.model_urlAPI(NEE)repoze.bfg.traversal.model_url)现在接受并尊重一个名为query. 此参数的值将用于组成一个查询字符串,该字符串将在返回之前附加到生成的URL。查看API文档(在docs目录或web上http://static.repoze.org/bfgdocs)(断开的URL)以获取更多信息。
0.6(2008年12月26日)¶
向后不兼容¶
而不是从
zope.configuration包装下使用repoze.bfg,repoze.bfg现在可以使用来自repoze.zcml包装(参见https://pypi.org/project/repoze.zcml/). 因此repoze.bfg包装现在取决于repoze.zcml包装,不再直接依赖于zope.component,zope.configuration,zope.interface或zope.proxy包装。这种变化的主要原因是使我们能够最终减少不适当的数量
repoze.bfgZope包依赖项,以及摆脱依赖包指令的不合理功能repoze.bfg.请注意,目前使用BFG所需的一组要求没有改变。这是由于在
chameleon.zpt希望很快就能解决。注:在柠檬水索引中,存在一个1.0b8-repozezcml0包,它可以消除这些要求。在此发布之前编写的BFG应用程序,预计“库存”
zope.componentZCML指令实现(例如adapter,subscriber或utility)要现在运行,必须1)包括meta.zcml文件从zope.component手动(例如)<include package="zope.component" file="meta.zcml">)包括zope.security包作为install_requires依赖项或2)更改其应用程序中的zcml以使用来自的声明 repoze.zcml 而不是股票申报。repoze.zcml只提供adapter,subscriber和utility指令。简而言之,如果您有一个现有的bfg应用程序,在这个更新之后,如果您的应用程序由于“zope.security”的导入错误而无法启动,那么让它重新工作的最快方法是添加
zope.security到bfg应用程序的“安装要求”setup.py,然后在应用程序的configure.zcml::<include package="zope.component" file="meta.zcml">
然后重新``setup.py develop``或重新安装应用程序。
这个
http://namespaces.repoze.org/bfg对于Paster生成的应用程序,XML名称空间现在是zcml中的默认XML名称空间。文档已更新以反映这一点。BFG的副本
meta.zcml和configure.zcml从根目录中删除repoze.bfg包。在0.3.6中,名为repoze.bfg.includes添加,其中包含这些zcml文件的“正确”副本;删除的副本是为了向后兼容。BFG
viewzcml指令不再调用zope.component.interface.provideInterface对于for接口。我们不支持provideInterface因为它改变了全局注册表。
其他¶
最低要求
chameleon.core现在是1.0B13。最低要求chameleon.zpt现在是1.0B8。最低要求chameleon.genshi现在是1.0B2。将贴纸模板“ez_setup.py”更新为需要安装工具0.6c9的模板。
转弯
view_execution_permitted从repoze.bfg.view模块化到文档化的API中。清除文件。
记录了如何创建能够为静态资源提供服务的视图。
0.5.6(2008年12月18日)¶
加快
traversal.model_url通过使用自定义的URL引用函数而不是python的urllib.quote,通过缓存URL路径段引用和编码结果,通过放弃python的urlparse.urljoin支持简单的字符串连接,并使用ob.__class__ is unicode而不是isinstance(ob, unicode)在一个战略位置。
0.5.5(2008年12月17日)¶
向后不兼容¶
在过去,在遍历期间,ModelGraphTraverser(默认遍历器)总是将每个URL路径段传递给
__getitem__作为字节字符串的模型对象的方法(astr对象)。现在,默认情况下,ModelGraphTraverser尝试将路径段解码为Unicode(Aunicode对象)在将其传递给__getitem__模型对象的方法。这使得模型对象在__getitem__当试图解析一个子对象时,由于模型对象本身不再需要尝试预测是否尝试解码遍历器传递的路径段。请注意,从0.5.4开始,repoze.bfg生成的URL
model_urlAPI将根据需要包含UTF-8编码的路径段,因此BFG本身生成的任何URL都可以被遍历器解码。如果另一个应用程序生成BFG应用程序的URL,要成功解析,它应该生成包含要成功解析的UTF-8编码路径段的URL。解码器一点也不神奇:如果在URL中传递了一个非UTF-8可解码的路径段(例如,使用UTF-16编码的路径段或其他一些不正常的路径段),BFG将引发一个TypeError消息指示它无法解码路径段。若要启用较旧的行为,路径段在传递到模型对象之前未解码为Unicode
__getitem__由遍历器传递,并作为原始字节字符串传递,设置unicode_path_segments在paste.ini文件的bfg应用程序节中将配置设置为假值,例如:unicode_path_segments = False
或者使用
BFG_UNICODE_PATH_SEGMENTenvvar设置为假值:BFG_UNICODE_PATH_SEGMENTS=0
0.5.4(2008年12月13日)¶
向后不兼容¶
URL引号“extra”元素名称作为
**elements到traversal.model_url应用程序编程接口。如果这些名称中有任何一个是Unicode字符串,请在URL引用之前将其编码为UTF-8。这是一种轻微的向后不兼容,如果您已经使用了UTF-8编码或URL引用了作为elements这个API。
错误修正¶
utf-8对模型路径中用于生成URL的每个段进行编码,然后在
traversal.model_url应用程序编程接口。这是一个错误修复,因为unicode不能总是被成功地引用url。
特征¶
使使用构建生成的python“解释器”运行单元测试成为可能。
添加
request.root到router.Router以便轻松访问应用程序根目录。
0.5.3(2008年12月7日)¶
移除
ITestingTemplateRenderer接口。什么时候?testing.registerDummyRenderer而是使用ITemplateRenderer接口,在内置模板工具进行渲染时检查该接口。此更改还允许开发人员在ZCML注册表中针对ITemplateRenderer;在查找任何磁盘模板之前都会找到这些模板。
0.5.2(2008年12月5日)¶
视图(函数或类实例)的组件注册处理程序现在观察组件适应注释(请参见
zope.component.adaptedBy)并在回退值之前使用它们for_和request_type. 此更改不会影响现有代码,因为在视图上设置注释时(不太可能),代码不依赖这些默认值。这意味着对于一个新的风格的类,你可以zope.component.adapts(ISomeContext, ISomeRequest)在类作用域或模块作用域作为bfg视图函数的修饰器,您可以这样做@zope.component.adapter(ISomeContext, ISomeRequest). 这与r.bfg.convention有所不同,因为您仍然需要在zcml中放置一些内容,以便完成注册;只有这些声明存在时,默认值才会改变。在横移机械内的干净路径中,从路径的末端和开始剥离所有斜线。
0.5.1(2008年11月25日)¶
添加
keys,items和values方法到testing.DummyModel.添加 __delitem__ 方法到
testing.DummyModel.
0.5.0(2008年11月18日)¶
修复modelgraphtraverser;不要尝试更改
__name__或__parent__在遍历期间声明它实现iLocation的对象,即使__name__或__parent__遍历的对象的名称与遍历步骤或或遍历父级中使用的名称不匹配。理由:这样做是愚蠢的。只有在应用程序中错误地配置了中间持久的非iLocation对象时,才发现此错误;遍历导致对此设置下的每个请求进行持久写入。repoze.bfg.location.locate现在无条件设置__name__和__parent__在提供iLocation的对象上(它以前只在它们不匹配通过相等存在于对象上的属性时有条件地设置它们)。
0.4.9(2008年11月17日)¶
添加变色龙文本模板API(变色龙$名称渲染,模板不需要包装在任何包含XML中)。
根据virtualenv(无条件)更改文档以解释安装。
使pushpage decorator与repoze.bfg.convention兼容
bfg_view当他们被堆起来的时候。将content_-length属性添加到testing.dummyRequest。
更改贴纸模板
tests.py包括一个真正的单元测试。将旧测试保留为集成测试。更新文档。针对类和的文档视图注册
repoze.bfg.convention在上下文中。更改默认的粘贴器模板,以便针对类而不是接口注册其单个视图。
在事件说明文档中,通过订户函数向请求添加请求类型接口的文档。
0.4.8(2008年11月12日)¶
向后不兼容¶
repoze.bfg.traversal.model_url现在总是在所有生成的URL后面加一个斜杠,除非将更多的元素作为第三个和后面的参数传入。理由:视图经常使用model_url没有第三个参数和以下参数,以便为模型生成URL,以便指向模型的默认视图。指向默认视图的URL root 模型在技术上http://mysite/而不是http://mysite(浏览器恰好在GET请求中隐式地请求“/”)。因为任何东西都不会自动生成URL 除了 模型由model_url因为根模型并不特别,所以我们继续这个模式。这一变化的影响是最小的(最多你会有太多的斜线在你的网址,而bfg处理得当)。
0.4.7(2008年11月11日)¶
特征¶
允许
testing.registerEventListener用于Zope3样式的“对象事件”(订阅服务器接受多个事件参数)。我们用参数扩展列表,而不是追加。
0.4.6(2008年11月10日)¶
漏洞修补¶
这个
model_path和model_url遍历API为根对象返回了错误的值(例如model_path返回''对于根对象,虽然它应该返回'/')
0.4.5(2008年11月9日)¶
特征¶
增加了一个
clone方法与A__contains__方法对DummyModel测试对象。允许dummymmodel对象接收额外的关键字参数,这些参数将作为属性附加。
DummyTemplatenderer现在回来了
self作为其实施。
0.4.4(2008年11月8日)¶
特征¶
增加了一个
repoze.bfg.testing模块试图使编写基于单元测试的BFG应用程序自动测试稍微容易一些。有关此模块的信息在文档中。默认模板渲染器现在通过查找
ITestingTemplateRenderer使用相对路径名。这是通过名为registerTemplateRenderer在里面repoze.bfg.testing.
废弃¶
名字
repoze.bfg.interfaces.ITemplate,repoze.bfg.interfaces.ITemplateFactory和repoze.bfg.interfaces.INodeTemplate已弃用。这些现在应该作为repoze.bfg.interfaces.ITemplateRenderer和repoze.bfg.interfaces.ITemplateRendererFactory和INodeTemplateRenderer分别。名字
repoze.bfg.chameleon_zpt.ZPTTemplateFactory被贬低。使用repoze.bfg.chameleon_zpt.ZPTTemplateRenderer.名字
repoze.bfg.chameleon_genshi.GenshiTemplateFactory已弃用。使用repoze.bfg.chameleon_genshi.GenshiTemplateRenderer.名字
repoze.bfg.xslt.XSLTemplateFactory已弃用。使用repoze.bfg.xslt.XSLTemplateRenderer.
0.4.3(2008-11-02)¶
漏洞修补¶
如果不将“get-options”的结果作为make-app的第二个参数传递,则在尝试查找isettings对象(内部)的设置时可能会导致属性错误。通过为设置对象提供默认值来修复
debug_authorization和debug_notfound.返回的实例
Allowed(而不是True)从has_permission当没有使用安全策略时。修复授权检查中默认拒绝将引发类型错误的错误(使用
ACLDenied而不是Denied)
0.4.2(2008年11月2日)¶
特征¶
将名为“repoze.bfg.debug”的单个ilogger公开为实用程序;此记录器是无条件注册的,由授权调试机器使用。为了方便起见,应用程序也可以根据需要使用它,而不是发明自己的记录器。
这个
BFG_DEBUG_AUTHORIZATION恩瓦尔和debug_authorization配置文件值现在只意味着调试视图调用的安全检查。以前,每次呼叫都会打印信息has_permission同样,这使得输出令人困惑。调试has_permission检查和其他手动权限检查,在您自己的代码中使用调试程序和打印语句。授权调试信息现在只存在于HTTP响应主体oif中
debug_authorization是真的。改进了授权调试消息的格式。
一个新的
BFG_DEBUG_NOTFOUND添加了envvar和对称的debug_notfound已添加配置文件值。如果两者都为真,并且bfg路由器返回NotFound响应(因为找不到视图),调试信息将打印到stderr。当该值设置为true时,httpNotFound响应的主体也将包含相同的调试信息。Allowed和Denied来自安全机制的响应现在被专门化为两种类型:ACL类型和非ACL类型。与ACL相关的响应是repoze.bfg.security.ACLAllowed和repoze.bfg.security.ACLDenied. 非ACL相关的响应是repoze.bfg.security.Allowed和repoze.bfg.security.Denied. 允许的类型响应继续计算等于其自身计算等于True布尔值,而被拒绝的类型响应继续计算等于其自身计算等于False布尔函数。这两种类型之间唯一的区别是为了调试而附加到它们上的信息。增加了一个新的
BFG_DEBUG_ALLenvvar和对称debug_all配置文件值。如果其中一个为真,则所有其他与调试相关的标志都将无条件设置为真(例如debug_notfound和debug_authorization)
文档¶
添加了有关调试标志更改的信息。
在安全章节中添加了一节,名为“调试强制授权失败”(例如
has_permssion)
漏洞修补¶
更改要使用的默认粘贴模板生成器
Paste#http服务器而不是PasteScript#cherrpy服务器。当REMOTE_USER被下游应用程序信任。
0.4.1(2008年10月28日)¶
漏洞修补¶
如果
render_view_to_response调用了函数,如果找到并调用了视图,但它返回了一些未实现IResponse的内容,则错误将通过未标记的方式传递。当我创建一个基本上不返回任何值的视图函数时,注意到了这一点,但在呈现视图时收到了一个NotFound错误而不是ValueError。这是固定的。
0.4.0(2008年10月3日)¶
文档¶
在文档的叙述部分添加了“环境和配置”一章。
特征¶
确保bfg在Python2.6下运行时不会生成警告。
环境变量
BFG_RELOAD_TEMPLATES现在可用(与reload_templates在配置文件中)。新的配置文件选项
debug_authorization加入。这将打开安全授权调试语句的打印以sys.stderr. 这个BFG_DEBUG_AUTHORIZATION还添加了环境变量;这将执行相同的任务。
漏洞修补¶
环境变量
BFG_SECURITY_DEBUG并不总是有效。它已重命名为BFG_DEBUG_AUTHORIZATION固定。
废弃¶
当旧的API名称来自
repoze.bfg.templates模块已导入。
向后不兼容¶
这个
BFG_SECURITY_DEBUG环境变量已重命名为BFG_DEBUG_AUTHORIZATION.
0.3.9(2008年8月27日)¶
特征¶
A
repoze.bfg.location添加了API模块。
向后不兼容¶
应用程序现在必须使用
repoze.bfg.interfaces.ILocation接口而不是zope.location.interfaces.ILocation表示模型对象是“位置感知”的。我们已经消除了对zope.location出于清洁的目的:随着Zope库的新版本发布,这些版本改进了依赖关系信息,从而消除了我们对zope.location将阻止新安装的repoze.bfg应用程序要求zope.security,egg,在“stock”repoze.bfg设置中根本没有真正使用。此时堆栈仍然需要这些依赖项;这纯粹是一个未来定位移动。以前版本的安全性和模型文档
repoze.bfg建议使用zope.location.interfaces.ILocation接口来表示模型对象是“位置感知”的。此文档已更改,以反映此接口现在应该从repoze.bfg.interfaces.ILocation相反。
0.3.8(2008年8月26日)¶
文档¶
以叙述的形式更好地记录URL分派。
错误修复¶
路由URL调度没有访问wsgi环境的权限,因此method=get等条件不起作用。
特征¶
添加
principals_allowed_by_permission安全模块的API。替换
z3c.pt支持与支持chameleon.zpt. 变色龙是以前命名的包的新名称z3c.pt. 注意:如果您更新了repoze.bfgSVN签出您用于开发的,您需要再次运行“setup.py install”或“setup.py develop”,以获得正确的变色龙软件包。z3c.pt不再受支持repoze.bfg. 用于呈现的所有API函数z3c.pt模板可以与新的包一起工作,并且模板的呈现应该几乎相同。添加
repoze.bfg.chameleon_zpt模块。此模块提供变色龙ZPT支持。添加
repoze.bfg.xslt模块。此模块提供XSLT支持。添加
repoze.bfg.chameleon_genshi模块。这提供了以前不存在的直接Genshi支持。
废弃¶
直接从导入API函数
repoze.bfg.template现已弃用。这个get_template,render_template,render_template_to_response现在应该从导入函数repoze.chameleon_zpt. 这个render_transform和render_transform_to_response现在应该从导入函数repoze.bfg.xslt. 这个repoze.bfg.template模块将“永远”保留,以支持向后兼容性。
0.3.7(2008年9月9日)¶
特征¶
添加与z3c.pt 1.0a7+的兼容性(z3c.pt成为命名空间包)。
错误修复¶
repoze.bfg.traversal.find_model功能无法正常工作。
0.3.6(2008年9月4日)¶
特征¶
添加启动过程文档。
允许配置缓存被包含特殊“不可缓存”鉴别器的操作绕过(对于结果可变的操作)。
漏洞修补¶
将core repoze.bfg zcml移动到
repoze.bfg.includes包,以便更好地将repoze.bfg用作命名空间包。调整代码生成器以使用它。我们已经离开了configure.zcml在repoze.bfg包中直接使用,以免破坏旧的应用程序。当一个zcml应用程序注册表缓存被取消勾选,并且它包含对一个不再存在的对象(比如视图)的引用时,bfg将无法正常启动。
0.3.5(2008-09-01)¶
特征¶
在创建和配置应用程序后发出事件通知 (
IWSGIApplicationCreatedEvent)新API模块:
repoze.bfg.view. 此模块包含名为render_view_to_response,render_view_to_iterable,render_view和is_response在API文档中记录。这些特性有助于编程(非服务器驱动)视图的执行。
0.3.4(2008年8月28日)¶
向后不兼容¶
制作
repoze.bfg一个名称空间包,这样我们可以允许人们创建子包(例如repoze.bfg.otherthing)在分开的鸡蛋里。这是一个向后不兼容的更改,因此无法从repoze.bfg模块直接。此更改将破坏由粘贴代码生成器生成的所有现有应用程序。相反,您需要将这些函数作为repoze.bfg.router:make_app和repoze.bfg.registry:get_options,分别。对不起,伙计们,这件事要么现在做,要么永远不做,现在肯定会更好。
特征¶
添加
model_path遍历模块的API函数。
错误修正
规范化repoze.bfg.caller_path返回的路径。
0.3.3(2008年8月23日)¶
修复生成的test.py模块以使用项目名称而不是包名称。
0.3.2(2008年8月23日)¶
去除
sampleapp来自bfg包本身的示例应用程序。移除对FormEncode的依赖(仅sampleApp需要)。
修复粘贴器模板生成,以便保留项目与包名称的区分大小写。
依靠
z3c.pt版本1.0A1(需要[lxml]目前额外)。读取和写入一个pickled zcml操作列表,存储为
configure.zcml.cache在应用程序的“正常”配置文件旁边。如果一个给定的bfg应用程序能够读取pickle数据,那么它的启动速度通常会更快。如果它不能读取pickle,那么它就无法优雅地读取真正的zcml文件。
0.3.1(2008年8月20日)¶
生成的应用程序差异:
make_app入口点重命名为app为了有一个不同的名称,与bfg函数同名,以防混淆。将“选项”处理添加到BFG
make_app以支持运行时选项。名为get_options已添加到注册表模块。此函数通常用于应用程序的app入口点。应用程序的粘贴配置文件部分现在可以提供reload_templates选项,如果为真,将阻止重新启动AppServerz3c.pt或检测到XSLT模板更改。只使用生成项目的“测试套件”中的模块名(运行包中找到的所有测试)。
生成的应用程序的默认端口从5432更改为6543(Postgres默认端口为6543)。
0.3.0(2008-08-16)¶
添加
get_templateAPI到模板模块。
0.2.9(2008年8月11日)¶
0.2.8是“棕色袋子”释放。根本不起作用。症状:试图呈现页面时出现componentLookuperError。
0.2.8(2008年8月11日)¶
添加
find_model和find_root遍历API。在此过程中,将ITraverser设置为单适配器(上下文),而不是多适配器(上下文和请求)。
0.2.7(2008-08-05)¶
添加
request_type属性的可用属性bfg:view配置.zcml元素。这个属性将有一个值,该值是一个点式python路径,指向一个接口。如果请求对象在执行视图查找时实现此接口,则将调用相应的视图。这意味着允许基于请求类型对站点进行简单的“剥皮”。事件订阅服务器应将接口附加到入口请求以支持外观。删除“仅模板”视图。这些只是令人困惑,从未被记录在案。
小URL调度检修:
connect方法urldispatch.RoutesMapper对象现在接受一个名为context_factory. 如果提供此参数,则它必须是可调用的,返回实例。当路由匹配时,此实例用作请求的上下文。RoutesModelTraverser的注册不再需要由应用程序执行;它现在在bfg zcml中。
0.2.6(2008年7月31日)¶
为inewrequest和inewresponse添加事件发送。请参阅文档中的events.rst章节
api目录。
0.2.5(2008年7月28日)¶
添加
model_url应用程序编程接口。
0.2.4(2008年7月27日)¶
添加了基于URL的调度。
0.2.3(2008年7月20日)¶
为已验证的用户ID和有效的主体添加API函数。
0.2.2(2008年7月20日)¶
将已验证的u用户ID和有效的u主体API添加到安全策略中。
0.2.1(2008年7月20日)¶
添加find_接口API。
0.2(2008年7月19日)¶
添加wsgiapp decorator。
“视图工厂”的概念被删除,取而代之的是始终调用一个视图,它是一个可调用的,直接返回响应(而不是返回一个视图)。因此,
factorybfg:view zcml语句中的属性已重命名为view. 还更改了各种接口名称。render_template和render_transform不再返回响应对象。相反,这些返回字符串。旧的行为可以通过使用render_template_to_response和render_transform_to_response.添加了“repoze.bfg.push:pushpage”装饰符,它从接受(上下文、请求)并返回顶级名称映射的可调用文件创建bfg视图。
添加了基于ACL的安全性。
通过呈现转换方法支持XSLT模板
0.1(2008年7月8日)¶
首次发布。