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.ISecurityPolicy
pyramid.request.Request.identity
。pyramid.request.Request.is_authenticated
pyramid.authentication.SessionAuthenticationHelper
pyramid.authorization.ACLHelper
is_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_property
used 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_policy
pyramid.config.Configurator.set_authorization_policy
pyramid.interfaces.IAuthenticationPolicy
pyramid.interfaces.IAuthorizationPolicy
pyramid.request.Request.effective_principals
pyramid.request.Request.unauthenticated_userid
pyramid.authentication.AuthTktAuthenticationPolicy
pyramid.authentication.RemoteUserAuthenticationPolicy
pyramid.authentication.RepozeWho1AuthenticationPolicy
pyramid.authentication.SessionAuthenticationPolicy
pyramid.authentication.BasicAuthAuthenticationPolicy
pyramid.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.Everyone
pyramid.security.Authenticated
pyramid.security.ALL_PERMISSIONS
pyramid.security.DENY_ALL
pyramid.security.ACLAllowed
pyramid.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-starter
cookiecutter 。在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.accept
API使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修改内置会话实现以支持
SameSite
cookie上的选项并将默认值设置为'Lax'
. 这种影响pyramid.session.BaseCookieSessionFactory
,pyramid.session.SignedCookieSessionFactory
和pyramid.session.UnencryptedCookieSessionFactoryConfig
. 参见https://github.com/pylons/pyramid/pull/3300修改
pyramid.authentication.AuthTktAuthenticationPolicy
和pyramid.csrf.CookieCSRFStoragePolicy
支持SameSite
cookies上的选项,并将默认值设置为'Lax'
. 参见https://github.com/pylons/pyramid/pull/3319新增
pyramid.httpexceptions.HTTPPermanentRedirect
HTTP 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改造
IRouter
API使用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_token
API在引擎盖下以保持兼容性。还有两个新的保险单要运来,pyramid.csrf.SessionCSRFStoragePolicy
和pyramid.csrf.CookieCSRFStoragePolicy
它将分别在会话和独立cookie中存储CSRF令牌。可以使用新的pyramid.config.Configurator.set_csrf_storage_policy
配置指令。应通过新的
pyramid.csrf.get_csrf_token
,pyramid.csrf.new_csrf_token
和pyramid.csrf.check_csrf_token
API以便在存储策略更改时继续工作。此外,pyramid.csrf.get_csrf_token
函数被注入到模板中,以便在UI代码中使用。请参阅https://github.com/pylons/pyramid/pull/2854和https://github.com/pylons/pyramid/pull/3019
次要特征¶
支持一个
open_url
中的配置设置pserve
配置文件的节。此URL用于在以下情况下打开Web浏览器:pserve --browser
被调用。当此设置不可用时,pserve
脚本将尝试从server:<server_name>
配置文件的一部分,但不要求以这种格式运行服务器,因此它可能会失败。参见https://github.com/pylons/pyramid/pull/2984这个
pyramid.config.Configurator
现在可以用作上下文管理器,它将自动推送/弹出线程局部变量(类似于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
澄清可能的误用
headers
Kwarg到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
全面检修
alchemy
scaffold以及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.ICacheBuster
API是一个简单的可调用的,而不是具有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_package
attribute和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大大提高了
pcreate
shell脚本输出。参见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_url
API和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.invalidate
API文档。改进和澄清关于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_permission
API和工作原理完全相同。旧的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.UnencryptedCookieSessionFactoryConfig
API已被弃用,并由pyramid.session.SignedCookieSessionFactory
. 注意,当cookies由UnencryptedCookieSessionFactoryConfig
与旧版本生成的cookie兼容,由签名的CokieSessionFactory生成的cookie不兼容。参见https://github.com/pylons/pyramid/pull/1142这个
pyramid.security.has_permission
API现已弃用。相反,使用新添加的has_permission
请求对象的方法。这个
pyramid.security.effective_principals
API现已弃用。而是使用新添加的effective_principals
请求对象的属性。这个
pyramid.security.authenticated_userid
API现已弃用。而是使用新添加的authenticated_userid
请求对象的属性。这个
pyramid.security.unauthenticated_userid
API现已弃用。而是使用新添加的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_view
pyramid.config.Configurator.add_route
pyramid.config.Configurator.add_subscriber
pyramid.view.view_config
pyramid.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_url
androute_path
APIs 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_config
1个堆栈帧是否远离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__.py
Pyramid。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.bfg
1.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日)¶
特征¶
这个
scan
A方法Configurator
可以通过ignore
参数,可以是字符串、可调用或由字符串和/或可调用项组成的列表。此功能允许扫描子模块、子包和全局对象。看到了吗https://venusian.readthedocs.io/en/latest/#忽略-有关如何使用ignore
参数scan
.当视图可调用返回无法转换为响应的值时(例如,当视图可调用返回未定义呈现器的字典或根本不返回任何值时),会出现更好的错误消息。错误消息现在包含关于视图可调用本身以及调用结果的信息。
当仅.pyc模块为
config.include
-ed.由于错误报告要求,这是不允许的,并且在尝试时会显示更好的错误消息。以前它会失败,比如“attributeError:'nonetype'对象没有属性'rfind'”。添加
pyramid.config.Configurator.add_traverser
API方法。有关更多信息,请参阅标题为“更改遍历器”的Hooks叙述性文档部分。这不是一个新特性,它只是提供了一个API,用于添加遍历器,而不需要使用ZCA API。添加
pyramid.config.Configurator.add_resource_url_adapter
API方法。有关详细信息,请参阅标题为“更改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_url
API现在接受这些参数: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_url
API现在接受这些参数:_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_defaults
decorator,将不应用视图默认值。请参阅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
. 在不更改请求工厂的情况下向请求添加惰性属性描述符。新属性可以被重新定义,有效地缓存实例生命周期的值。这种方法的常见用例是获取请求的数据库连接或标识当前用户。使用
waitress
wsgi服务器而不是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_appsettings
API函数pyramid.paster
模块。此函数返回在[app:...]
pastedeploy ini文件中的节。补充
setup_logging
API函数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
新粉刷的脚手架现在是wsgiref
wsgi服务器而不是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_url
API(及其同类产品)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_prefix
include的功能。在使用“自动提交”配置程序时,可能需要更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_request
API在1.1B3中过于仓促。它已被移除。抱歉给您带来不便。使用pyramid.request.Request.blank
API代替。
特征¶
这个
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.interface
3.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.preprocessor
config 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.authorization
API文档。在中呈现每个公开接口的函数定义
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_localizer
API(从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_response
WebOB响应对象的功能现在将正常工作。名为的新方法
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.wsgiapp2
decorator只在它修饰通过遍历找到的视图时有效地工作;它忽略了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.bfg
1.1,此功能将在未来版本中完全删除。以下(未记录的,类似字典的)方法
pyramid.request.Request
对象已被弃用:__contains__
,__delitem__
,__getitem__
,__iter__
,__setitem__
,get
,has_key
,items
,iteritems
,itervalues
,keys
,pop
,popitem
,setdefault
,update
和values
. 使用这些方法中的任何一种都将导致发出弃用警告。这些方法是为了在repoze.bfg
1.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.Response
API,它有许多方法和属性。这个
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.testing
API命名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_route
URL调度叙述章节中的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#retry
zodb模板中的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_domain
authtktauthenticationpolicy的参数,默认为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.Request
API文档。将有关在Mako模板中使用i18n的(最少)文档添加到“国际化和本地化”叙述章节。
把“表单”章节的内容移回“视图”章节;我想不出一个更好的地方来放置它。
稍微改进的接口文档
IAuthorizationPolicy
.在URL调度章节中,至少解释URL调度替换标记中自定义正则表达式的用法。
废弃¶
使用
pyramid.view.bfg_view
别名pyramid.view.view_config
(向后兼容垫片)现在发出警告。
向后不兼容¶
使用
testing.setUp
现在注册一个isettings实用程序作为副作用。一些测试代码在testing.setUp
via 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
.这个
handler
ZCML指令已被删除。它现在是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_tutorials
Github存储库。“资源定位和视图查找”一章已被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 pshell
IPython的环境。
特征¶
如果资源实现
__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日)¶
特征¶
添加
handler
ZCML指令。此指令的作用与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_sqla
Paster模板现在在各自的模板中使用惯用的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()
方法,获取变色龙宏时需要使用)。在项目叙述文档章节中添加“修改包结构”部分(解释如何将模块转换为包)。
为新的
handler
zcml部分中的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_path
API,允许人们生成相对的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_configure
API已被删除。自repoze.bfg 1.2a1以来,它被广告称为已被删除,但实际上并没有。
废弃¶
这个
pyramid.settings.get_settings
API现已弃用。使用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(),如果存在
registry
zcml上下文上的属性(取消使用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.httpexceptions
API文档章节。增加了一个
pyramid.session
API文档章节。增加了一个
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
被移除。这个
bfgshell
Paster命令现在命名为pshell
.所有内置金星装饰师的金星“类别”(例如
subscriber
andview_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
价值观authtktauthenticationpolicy
zcml现在默认为auth_tkt
(过去它默认为repoze.bfg.auth_tkt
)默认值
cookie_name
价值观pyramid.authentication.AuthTktAuthenticationPolicy
构造函数现在默认为auth_tkt
(过去它默认为repoze.bfg.auth_tkt
)这个
request_type
论据view
ZCML指令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_path
API现在急切地尝试对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_view
API,发送到视图的上下文不正确(可能是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_permission
ZCML指令。添加的文档
default_permission
构造函数值和set_default_permission
配置程序API文档中的方法。在“安全”章节中添加了一个名为“设置默认权限”的新章节。
文件
renderer_globals_factory
和request_factory
配置器构造函数的参数。在文档的“Hook”章节中添加了两个部分:“使用响应回调”和“使用完成的回调”。
添加了
request.exception
属性repoze.bfg.request.Request
API文档。为“响应回调”和“完成回调”添加了词汇表条目。
“请求处理”叙述章节已更新,以记录完成和响应回调步骤。
接口API文档中的新接口:
IRoutePregenerator
.在url分派叙述文档章节中添加了“匹配的路由”部分,详细介绍了
matched_route
属性。
1.3A12(2010年9月8日)¶
漏洞修补¶
修复错误
repoze.bfg.url.static_url
URL生成:如果使用两个资源规范来创建两个单独的静态视图,但它们共享一个公共前缀,则有可能static_url
将生成错误的URL。在中修复另一个错误
repoze.bfg.static_url
URL生成:生成的URL中的斜线太多。防止可能导致
RuntimeError
渲染尚未渲染一次的变色龙模板时。当多个人或线程试图同时执行同一视图时,这通常会在重新启动后直接发生:https://bugs.launchpad.net/karl3/+bug/621364
特征¶
论点
repoze.bfg.configuration.Configurator.add_route
之前被称为path
现在叫做pattern
为了更好的解释。为了向后兼容,传递一个名为path
到add_route
仍然可以无限期地工作。这个
path
zcml的属性route
指令现在命名为pattern
为了更好的解释。老年人path
属性将无限期地继续工作。
文档¶
所有将路由模式称为
path
现在已更新,将它们作为pattern
.这个
repoze.bfg.interfaces
API文档页面现在通过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.request
API章。它可用于在创建具体的响应对象之前影响响应值。这个
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
漏洞修补¶
在内部为本地“静态视图”注册的路由模式(通过
static
ZCML指令或通过add_static_view
配置程序的方法)不正确。它是为例如。static*traverse
,而它应该已经注册static/*traverse
. 症状:当两个静态视图共享相同的路径前缀(例如/static
和/static2
)
向后不兼容¶
如果视图代码(或渲染器)返回的响应不是“真实”响应(例如,如果它不具有
.status
,.headerlist
和.app_iter
ATT)
文档¶
为添加API章节
repoze.bfg.request
模块,其中包括repoze.bfg.request.Request
类(“请求对象”)。修改“请求和响应”叙述章节以引用新的
repoze.bfg.request
API章。一些内容从本章移到了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_renderer
API在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_route
API现在返回添加的路由对象。A
repoze.bfg.events.subscriber
添加了装饰器。这个修饰器修饰模块作用域函数,然后在执行scan()后将其视为事件侦听器。参见事件叙述文档章节和repoze.bfg.events
有关更多信息,请参阅模块文档。
漏洞修补¶
当为尚未存在的路由添加视图时(“尚未存在”是指临时添加视图,并为尚未通过添加路由添加的路由添加路由名称),该视图的值
custom_predicate
参数add_view
迷路了。症状:当同时使用URL调度和自定义视图谓词时,错误的视图匹配。A的模式匹配
:segment
URL调度路由模式中的标记现在总是至少匹配一个字符。请参阅下面这个变更日志中的“向后不兼容”。
向后不兼容¶
正则表达式中存在进行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.subscriber
API文档repoze.bfg.events
API文档。在“设计防御”一章中添加了一个名为“zope 3”的部分,默认情况下强制执行“ttw”授权检查;bfg不执行。
1.3A6(2010年7月25日)¶
特征¶
新论点
repoze.bfg.configuration.Configurator.add_route
以及route
ZCML指令: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_settings
API)。这个
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.testing
API名称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_url
API已更改。如果关键字_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_url
API将生成将此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继承的任何内容)时
Exception
builtin)作为视图上下文参数,例如: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_view
decorator、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
和forbidden
ZCML指令。这些方法和指令将在可预见的未来继续工作,但在文档中已弃用。
依赖关系¶
新的安装时间依赖于
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(现在可以了)。
漏洞修补¶
确保
secure
authtktauthenticationpolicy构造函数的标志按文档所述执行(合并Daniel Holth的Fancy-cookies-2分支)。
特征¶
添加
path
和http_only
AuthtktAuthenticationPolicy构造函数的选项(合并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
来自的谓词参数route
ZCML指令属性集。这些属性是推测性的。如果需要这些属性公开的功能,请使用route_name
的属性view
ZCML指令。
依赖关系¶
删除对的依赖项
sourcecodegen
(不取决于变色龙1.1.1+)。
1.2b3(2010-01-24)¶
漏洞修补¶
使用“混合模式”(Traversal和UrlDispatch)时,默认情况下查找与路由相关的视图,即使使用更具体的上下文进行了与路由无关的视图注册。默认设置是先查找具有更具体上下文的视图。使用新的
use_global_views
返回旧行为的路由定义的参数。
特征¶
添加
use_global_views
参数add_route
配置器的方法。当此参数为true时,为注册的视图 no 如果找不到与路由相关的更多特定视图,则将找到路由。添加
use_global_views
ZCML属性<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_xxx
Jython的工作(修复轻微的不相容性和治疗__doc__
在类层面)。更新了对的依赖项
WebOb
需要支持测试中使用的功能的版本。
特征¶
Jython兼容性(至少当repoze.bfg.jinja2用作模板引擎时;变色龙在Jython下不工作)。
当找不到呈现器模板时,在回溯中显示模板资源规范的派生abspath。
当由于平台不兼容而无法呈现变色龙模板时,显示原始回溯。
1.2A10(2010-01-04)¶
特征¶
这个
Configurator.add_view
方法现在接受名为context
. 这是名为for_
;优先于for_
,但是for_
将继续得到“永远”的支持。这个
view
zcml指令现在接受名为context
. 这是名为for
;优先于for
,但是for
将继续得到“永远”的支持。这个
Configurator.add_route
方法现在接受名为view_context
. 这是名为view_for
;优先于view_for
,但是view_for
将继续得到“永远”的支持。这个
route
zcml指令现在接受名为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日)¶
特征¶
添加
**kw
ARG到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.interfaces
API文档的模块。
废弃¶
这个
repoze.bfg.testing.registerRoutesMapper
API(在早期的1.2 alpha中添加)已被弃用。它的导入现在会生成一个弃用警告。
1.2A7(2009年12月20日)¶
特征¶
repoze.bfg.configuration.Configurator
类:testing_securitypolicy
,testing_models
,testing_add_subscriber
和testing_add_template
repoze.bfg.testing
API命名registerDummySecurityPolicy
,registerModels
,registerEventListener
和registerTemplateRenderer
testing
命名的API名义上是不推荐使用的(尽管它们可能会永远存在,因为它们在野外大量使用)。向添加新的API
repoze.bfg.configuration.Configurator
类:add_settings
. 此API可用于添加“设置”(通过repoze.bfg.settings.get_settings
api)在最初设置配置器之后。这对于测试来说是最有用的。添加
custom_predicates
论据Configurator
add_view
方法bfg_view
装饰器和zcml的属性列表view
指令。如果custom_predicates
如果指定,则它必须是谓词可调用项的序列(谓词可调用项接受两个参数:context
和request
回报True
或False
)只有当所有自定义谓词都返回时,才会调用关联的视图可调用True
. 当没有现有的预定义谓词可用时,请使用一个或多个自定义谓词。预定义谓词和自定义谓词可以自由混合。添加
custom_predicates
论据Configurator
add_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.NotFound
orrepoze.bfg.exceptions.Forbidden
class (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.py
tests_require
参数(只有在repoze.bfg
setup.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.bfg
paster
模板现在使用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_registry
Callable已被删除。这个
repoze.bfg.view.map_view
Callable已被删除。这个
repoze.bfg.view.owrap_view
Callable已被删除。这个
repoze.bfg.view.predicate_wrap
Callable已被删除。这个
repoze.bfg.view.secure_view
Callable已被删除。这个
repoze.bfg.view.authdebug_view
Callable已被删除。这个
repoze.bfg.view.renderer_from_name
Callable已被删除。使用repoze.bfg.configuration.Configurator.renderer_from_name
相反(但仍然不是API)。这个
repoze.bfg.view.derive_view
Callable已被删除。使用repoze.bfg.configuration.Configurator.derive_view
相反(但仍然不是API)。这个
repoze.bfg.settings.get_options
Callable已被删除。它的工作已被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指令现在都使用
path
ZCML上下文的方法,将相对名称解析为绝对名称(强制配置要求)。这个
repoze.bfg.scripting.get_root
当API将请求设置为threadlocal时,它现在使用的是“real”webob请求,而不是fakerequest。这个
repoze.bfg.traversal.traverse
API现在在调用遍历器时使用“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_view
repoze.bfg.view.render_view_to_iterable
repoze.bfg.view.render_view_to_response
repoze.bfg.view.append_slash_notfound_view
repoze.bfg.view.default_notfound_view
repoze.bfg.view.default_forbidden_view
repoze.bfg.configuration.rendered_response
repoze.bfg.security.has_permission
repoze.bfg.security.authenticated_userid
repoze.bfg.security.effective_principals
repoze.bfg.security.view_execution_permitted
repoze.bfg.security.remember
repoze.bfg.security.forget
repoze.bfg.url.route_url
repoze.bfg.url.model_url
repoze.bfg.url.static_url
repoze.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.bfg
API callget_current_registry
将使用此注册表。这一变化是因为
repoze.bfg
现在,期望它使用的注册表具有与的裸实例稍有不同的API。zope.component.registry.Components
.视图注册不再注册
repoze.bfg.interfaces.IViewPermission
适配器(框架不再检查它;从1.1开始,视图就负责提供自己的安全性)。这个
repoze.bfg.router.make_app
Callable不再接受authentication_policy
也不authorization_policy
参数。此功能在1.0版中已被弃用,已被删除。模糊:配置视图的机器
request_type
and 一route_name
将忽略route_name
仅为所暗示的接口注册视图request_type
. 在不太可能的情况下,您试图同时使用这两个功能,症状可能是命名为request_type
但在匹配路径时,未找到与路径相关的。现在,如果一个视图同时配置了request_type
和Aroute_name
,引发错误。这个
route
zcml指令现在不再接受request_type
或view_request_type
属性。这些属性实际上并没有以任何有用的方式工作(请参见上面的条目)。因为
repoze.bfg
包现在包含adapter
,subscriber
和utility
zcml指令,它现在是一个错误<include package="repoze.zcml" file="meta.zcml"/>
在a的zcml中repoze.bfg
应用。如果您的zcml发生冲突,则会引发zcml冲突错误。这不应该是“正常”安装的问题;它始终是repoze.bfg.includes
zcml在过去包含这个文件;现在不包含。这个
repoze.bfg.testing.zcml_configure
已删除API。使用Configurator.load_zcml
API代替。
废弃¶
这个
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.testing
API文档。
漏洞修补¶
使用在通过调用的交互式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.bfg
1.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_zodb
1.1a9中的粘贴模板无法正常工作。恢复原状
renderer
别名view_renderer
在<route>
ZCML指令(野生1.1a BW兼容)。bfg_routesalchemy
贴纸模板:更改<route>
声明:重命名renderer
属性到view_renderer
.由返回的头值
authtktauthenticationpolicy
remember
和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
如果任何两个相同的谓词视图组合了谓词值和=
签名和一个不带(例如a
VSa=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
和view
zcml指令现在将接口注册为命名实用程序(从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
的属性route
zcml指令被删除。
1.1a8(2009年10月27日)¶
特征¶
添加
path_info
查看配置谓词。paster bfgshell
如果可以导入,现在支持ipython。感谢Daniel Holth最初的补丁。添加
repoze.bfg.testing.registerSettings
API,见“repoze.bfg.testing”API章节。这允许注册通过repoze.bfg.settings.get_settings()
用于单元测试。名字
root
现在稍早(在发出newrequest事件之前)作为请求的属性提供。root
是应用程序“根工厂”的结果。补充
max_age
参数到authtktauthenticationpolicy
ZCML指令。如果设置了此值,它必须是一个整数,表示auth tkt cookie将生存的秒数。主要是,它的存在允许auth-tkt cookie跨浏览器会话生存。
漏洞修补¶
修复“扫描”过程中遇到的错误(当
<scan ..>
指令用于1.1a7中介绍的zcml)。症状:AttributeError: object has no attribute __provides__
在启动时引发。这个
reissue_time
论据authtktauthenticationpolicy
ZCML指令现在实际工作。当设置为整数值时,每当请求需要身份验证时,都会在响应中追加一个AuthTicket set cookie头,“现在”减去AuthTicket的时间戳大于reissue_time
秒。
文档¶
在叙述性文档中添加一章,标题为“请求和响应”,内容取自WebOB文档。
在“视图”一章中调用zcml指令的谓词属性。
修复路由文件 (
_query
证明文件为query
和_anchor
证明文件为anchor
)
向后不兼容¶
这个
authtkt
身份验证策略remember
方法不再是荣誉token
或userdata
关键字参数。
内部的¶
如何改变
bfg_view
decorator用作类方法decorator时工作。在1.1a7中,“scan”指令实际上试图在启动时搜索扫描包中的每个类,调用dir
针对每个找到的类,然后调用getattr
根据发现的每件事dir
看看是不是一种方法。这导致了一些奇怪的症状(例如AttributeError: object has no attribute __provides__
,通常只是个坏主意。现在,不是在启动时为方法搜索类,而是bfg_view
用于填充方法类的修饰符本身__dict__
当它被用作方法修饰器时。这也需要一个令人讨厌的框架,但它比启动时的摸索行为稍微不那么讨厌。这本质上是一个回归到1.1a6“摸索”行为加上一些特殊的魔法使用bfg_view
decorator作为方法decoratorbfg_view
类本身。路由器现在检查
global_response_headers
返回响应之前请求对象的属性。如果该值存在,则假定它是两个元组的序列,表示要附加到“normal”响应头的一组头。这个特征是内部的,而不是外部的,因为不清楚它是否会长期存在。它是为了支持reissue_time
Authtkt身份验证策略的功能。接口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
和forbidden
ZCML指令现在接受以下附加属性:attr
,renderer
和wrapper
. 它们与ZCML上下文中的含义相同。view
指令。像姜戈那样的行为
APPEND_SLASH=True
使用repoze.bfg.view.append_slash_notfound_view
在应用程序中查看为“未找到”视图。如果此视图是“未找到”视图(表示找不到视图),并且在应用程序的配置中定义了任何路由,则PATH_INFO
不是以斜线结尾,如果PATH_INFO
plus 斜线匹配任何路由的路径,执行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.url
URL实现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
渲染器。此呈现器将任何可调用视图的非响应返回值转换为字符串。它记录在“观点”叙述章节中。给予
route
ZCML指令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_view
decorator)现在可以接受“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.registerDummyRenderer
API已被弃用,取而代之的是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.registerDummyRenderer
API在您的测试中使用自定义的“renderer”参数和您自己的renderer实现,您需要更改该renderer实现以接受kw
而不是**kw
在其__call__
方法(修订:接受value
和system
从1.1a4起的位置参数)。这个
ITemplateRendererFactory
接口已更改。以前它的__call__
方法接受auto_reload
关键字参数。现在它__call__
方法不接受关键字参数。渲染器现在自己负责确定自动重新加载的细节。这纯粹是一种内部变化。此接口从未是外部的。这个
template_renderer
1.1a2中引入的zcml指令已被删除。它已被替换为renderer
指令。上一个版本(1.1a2)添加了名为
template
. 在此版本中,属性已重命名为renderer
. 这意味着属性更通用:它现在不仅可以是模板名,还可以是任何渲染器名(alajson
)在上一个版本(1.1a2)中,如果系统没有关联
template
使用扩展名为“已知”的文件名查看配置值。在此版本中,必须使用renderer
属性,该属性是以.txt
扩展(例如)templates/foo.txt
)使用变色龙文本渲染器。
1.1a2(2009年9月14日)¶
特征¶
ZCML
view
指令(以及相关的bfg_view
decorator)现在可以接受“attr”值。如果提供了“attr”值,则认为它是在需要响应时要调用的视图对象的名为方法。这通常只适用于作为类或实例的视图(对于函数不太有用,因为函数通常没有除__call__
)ZCML
view
指令(以及相关的bfg_view
decorator)现在可以接受“template”值。如果提供了“template”值,并且view callable返回字典,则关联的模板将与字典一起呈现为关键字参数。请参见名为“视图template
“在“视图”叙述文档一章中了解更多信息。
1.1a1(2009年9月6日)¶
漏洞修补¶
“测试”模块从bfg-alchemy-paster模板中删除;这些测试不起作用。
BugFix:
discriminator
对于zcml,“route”指令不正确。可以注册两个发生冲突的路由,而不需要系统在启动时发出configurationconflictError。
特征¶
功能添加:查看谓词。它们暴露在
request_method
,request_param
和containment
zcml的属性view
声明,或@bfg_view
装饰者。视图谓词可用于为比以前更精确的环境参数集注册视图。例如,可以用相同的视图注册两个视图name
用不同request_param
属性。如果request.params
dict包含“foo”(request_param=“foo”),可以调用一个视图;如果它包含“bar”(request_param=“bar”),则可以调用另一个视图。request_param
也可以将键/值对命名为alafoo=123
. 只有当foo
key在request.params dict中,其值为“123”。这个特殊的例子可以为不同的表单提交编写单独的视图函数。其他谓词,containment
和request_method
工作相似。containment
是一个视图谓词,仅当上下文的图形沿袭具有具有特定类或接口的对象时才匹配。request_method
是一个视图谓词,当HTTPREQUEST_METHOD
等于某个字符串(例如“post”)。这个
@bfg_view
decorator现在接受三个附加参数:request_method
,request_param
和containment
.request_method
当您希望视图仅匹配具有特定HTTP的请求时使用REQUEST_METHOD
;一个字符串,用于命名REQUEST_METHOD
也可作为request_type
为了向后兼容。request_param
当您希望视图仅匹配包含特定request.params
键(有值或无值)。containment
当您想要匹配一个请求时使用,该请求的上下文在其图形沿袭中有一些类或接口。这些统称为“视图谓词”。这个
route
ZCML指令获得荣誉view_request_method
,view_request_param
和view_containment
属性,如果提供了相关视图,则将这些值传递给相关视图。另外,request_type
属性现在可以拼写为view_request_type
和permission
可以拼写为view_permission
. 以开头的任何属性view_
现在可以不用view_
前缀,所以view_for
可以拼写为for
现在,等等。这两种形式都记录在urldispatch叙述文档一章中。这个
request_param
zcml view指令属性(及其bfg_view
decorator-cosin)现在可以同时指定键和值。例如,request_param="foo=123"
意味着foo键的值必须为123
使视图“匹配”。允许
repoze.bfg.traversal.find_interface
使用类对象作为参数与model
过去了。这意味着你现在可以find_interface(model, SomeClass)
以及在世系中发现的第一个物体SomeClass
作为其类(或找到的第一个对象SomeClass
因为它的任何超类)都将被返回。补充
static
zcml指令,它为在目录中提供文件的视图注册路由。有关更多信息,请参阅“视图”叙述性文档一章的“使用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来完成。这个
static
ZCML指令现在在构造路由时使用自定义根工厂。界面
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_method
zcml属性或request_method
bfg_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日)¶
remoteuserauthenticationpolicy
zcml指令没有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指令:
repozewho1authenticationpolicy
remoteuserauthenticationpolicy
authtktauthenticationpolicy
添加一个新的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
为了允许使用resource
ZCML指令。这个PackageURLParser
类已添加到(新)static
bfg中的模块;它是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_resources
get_resource_filename
,get_resource_stream
或get_resource_string
当使用重写时,API将获取重写文件。但是,唯一使用pkg_resources
bfg中的api是模板化的东西,所以我们只在这里调用模板重写。使用
pkg_resources
API用于定位模板文件名,而不是使用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_for
bfg应用程序中的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
属性route
ZCML指令。此属性应引用接口或类(所有for
的属性view
ZCML指令)。
文档¶
安装部分的条件文档(“如何安装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_view
decorator现在接受一个额外的参数:route_name
. 如果Aroute_name
已指定,它必须与以前定义的名称匹配route
语句。如果指定了该视图,则仅当该路由在请求期间匹配时才调用该视图。现在可以执行遍历 之后 一条路线匹配。使用模式
*traverse
在一个<route>
path
zcml中的属性,它匹配的路径余数将用作遍历路径。当任何路由定义匹配时,wsgi环境现在将包含一个键
bfg.routes.route
(匹配的路由对象)和键bfg.routes.matchdict
(调用route.match的结果)。
废弃¶
公用事业登记
repoze.bfg.interfaces.INotFoundView
和repoze.bfg.interfaces.IForbiddenView
现在已弃用。使用notfound
和forbidden
ZCML指令(有关更多信息,请参阅“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.adapter
bfg视图函数上的装饰器不再工作。使用@repoze.bfg.view.bfg_view
decorator将函数(或类)标记为视图。在环境中找到匹配路由对象的名称已从中更改
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.settings
API文档。
漏洞修补¶
还原了在0.9中意外删除的bfg_alchemy paster模板缺少的入口点声明。
文档¶
修复对的引用
wsgiapp
在wsgiapp2
API文档repoze.bfg.wsgi
模块。
API移除¶
这个
repoze.bfg.location.locate
API被删除了:它做的还不够有用,而且有一个误导性的名字。
0.9(2009年6月1日)¶
漏洞修补¶
无法注册自定义
IRoutesContextFactory
作为默认上下文工厂使用,如“hooks”一章中所述。
特征¶
这个
request_type
zcml的参数view
声明和bfg_view
装饰器现在可以是字符串之一GET
,POST
,PUT
,DELETE
或HEAD
而不是对从中导入的各个接口类型的引用repoze.bfg.interfaces
.这个
route
zcml指令现在接受request_type
作为它的别名condition_method
对称性的论证view
指令。这个
bfg_routesalchemy
Paster模板现在提供了一个单元测试,并在视图呈现期间实际使用数据库。
移除¶
去除
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_app
API函数paster
模块。这将从给定配置文件名和节名的配置文件中获取wsgi应用程序。见repoze.bfg.paster
有关详细信息,请参阅API文档。添加名为的新模块
scripting
. 它包含一个get_root
API函数,它提供了一个路由器实例,返回一个遍历根对象和一个“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
. 它们的组合(由securitypolicy
ZCML指令)取代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_permitted
API现在应该从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_view
Python2.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
)注册和声明性注册(例如view
zcml)中的指令。在一个中等大小的项目中(535个zcml操作和15个zcml文件),执行从pickle读取的操作只节省了大约200毫秒(2.5秒与平均2.7秒)。对于非常小的项目(1个zcml文件和4个操作),启动时间是可比的,有时从pickle读取时甚至会变慢,而且这两种方法都非常快,以至于它实际上并不重要。
0.8(2009年5月18日)¶
特征¶
增加了一个
traverse
函数到repoze.bfg.traversal
模块。此函数可用于检索路径解析期间计算的某些值。有关此函数的更多信息,请参阅文档的遍历API章节。
废弃¶
内部:
ITraverser
Callables现在应该返回字典而不是元组。在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
它也被移除了。的语义
route
zcml指令已简化。以前,假设要使用路由,需要将路由映射到外部注册的视图。新的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.core
1.0B32(非LXML依赖版本)和chameleon.zpt
1.0B16+;chameleon.zpt
pageTemplateFile实现用于返回字符串,但现在返回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_path
andrepoze.bfg.traversal.model_path_tuple
functions 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_path
API 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_model
API不再将作为Unicode对象传递给它的完整路径的Unicode表示形式隐式转换为UTF-8字符串。调用方应使用由repoze.bfg.traversal.model_path
或由结果返回的元组值repoze.bfg.traversal.model_path_tuple
或者他们应该使用有关传递字符串的准则path
中描述的参数find_model
API文档。
错误修正¶
中包含的每个参数
elements
passed torepoze.bfg.traversal.model_path
will 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_model
API现在接受“路径元组”(请参见上面关于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_url
API现在可以处理从路由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_cached
decorator现在使用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应用程序的配置文件设置都作为ISettings
BFG内的公用设施。已将现有的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_type
bfg视图声明的属性。只有使用与传入请求中的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.Router
Router类只接受一个参数:registry
. 这个repoze.bfg.router.Router
类现在通过实用工具查找来检索根策略。这个repoze.bfg.router.make_app
API现在还执行一些以前在内部处理过的重要应用程序注册。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_url
API(从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_url
API(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.bfg
Zope包依赖项,以及摆脱依赖包指令的不合理功能repoze.bfg
.请注意,目前使用BFG所需的一组要求没有改变。这是由于在
chameleon.zpt
希望很快就能解决。注:在柠檬水索引中,存在一个1.0b8-repozezcml0包,它可以消除这些要求。在此发布之前编写的BFG应用程序,预计“库存”
zope.component
ZCML指令实现(例如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
view
zcml指令不再调用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_url
API将根据需要包含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_SEGMENT
envvar设置为假值: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_ALL
envvar和对称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.bfg
SVN签出您用于开发的,您需要再次运行“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_template
API到模板模块。
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。
“视图工厂”的概念被删除,取而代之的是始终调用一个视图,它是一个可调用的,直接返回响应(而不是返回一个视图)。因此,
factory
bfg: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日)¶
首次发布。