pyramid.events
¶
功能¶
- subscriber(*ifaces, **predicates)[源代码]¶
通过激活装饰器 scan 它将被修饰的函数视为传递给
*ifaces
以及作为**predicates
到decorator构造函数。例如:
from pyramid.events import NewRequest from pyramid.events import subscriber @subscriber(NewRequest) def mysubscriber(event): event.request.foo = 1
可以将多个事件类型作为构造函数参数传递。将为每种事件类型调用经过修饰的订阅者。
from pyramid.events import NewRequest, NewResponse from pyramid.events import subscriber @subscriber(NewRequest, NewResponse) def mysubscriber(event): print(event)
当
subscriber
使用decorator时不传递参数,对发送的每个事件调用它所修饰的函数:from pyramid.events import subscriber @subscriber() def mysubscriber(event): print(event)
此方法在 scan 对包含它的包或模块执行,ala:
from pyramid.config import Configurator config = Configurator() config.scan('somepackage_containing_subscribers')
任何
**predicate
参数将传递给pyramid.config.Configurator.add_subscriber()
. 见 订阅服务器谓词 有关谓词如何缩小将调用订阅服务器的环境集的描述。将传递给 venusian
attach
函数是_depth
和_category
._depth
是为希望从另一个装饰器重用此类的人提供的。默认值为0
并且应该相对于subscriber
调用。它将传递给 venusianattach
当Venusian检查装饰器是否在类或模块上下文中使用时,函数作为调用堆栈的深度。它不常用,但在这种情况下可能有用。_category
设置装饰器类别名称。它可以与category
的参数scan
控制应处理哪些视图。见
venusian.attach()
在金星函数中获取更多关于_depth
和_category
参数。在 1.9.1 版本发生变更: 增加了
_depth
和_category
参数。
事件类型¶
- class ApplicationCreated(app)[源代码]¶
此类的实例作为 event 当
pyramid.config.Configurator.make_wsgi_app()
被称为。实例有一个属性,app
,它是 router 这将处理wsgi请求。此类实现pyramid.interfaces.IApplicationCreated
接口。备注
为了向后兼容的目的,这个类也可以作为
pyramid.events.WSGIApplicationCreatedEvent
. 这是以前事件类的名称 Pyramid
- class NewRequest(request)[源代码]¶
此类的实例作为 event 无论何时 Pyramid 开始处理新请求。事件实例有一个属性,
request
,这是一个 request 对象。此事件类实现pyramid.interfaces.INewRequest
接口。
- class ContextFound(request)[源代码]¶
此类的实例作为 event 后 Pyramid router 找到一个 context 对象(在执行遍历之后),但在执行任何视图代码之前。实例有一个属性,
request
,它是由 Pyramid .值得注意的是,请求对象将具有一个名为
context
,这是将提供给最终将被调用的视图的上下文,以及上下文查找代码附加的其他属性。此类实现
pyramid.interfaces.IContextFound
接口。备注
至于 Pyramid 1.0,为了向后兼容的目的,此事件也可以导入为
pyramid.events.AfterTraversal
.
- class BeforeTraversal(request)[源代码]¶
此类的实例作为 event 后 Pyramid router 已尝试查找 route 对象,但在执行任何遍历或视图代码之前。实例有一个属性,
request
,它是由 Pyramid .值得注意的是,请求对象 may 具有名为的属性
matched_route
,如果找到匹配的路由。如果没有匹配的路由,则此属性不可用。此类实现
pyramid.interfaces.IBeforeTraversal
接口。
- class NewResponse(request, response)[源代码]¶
此类的实例作为 event 无论何时 Pyramid view 或 exception view 返回A response .
实例有两个属性:“‘请求’”,这是导致响应的请求,以及
response
,这是视图或渲染器返回的响应对象。如果
response
是由 exception view ,请求将具有一个名为exception
,这是导致执行异常视图的异常对象。如果响应是由“普通”视图生成的,则请求的此属性将None
.如果由于异常视图未捕获的异常而无法创建响应,则不会生成此事件(在此情况下不会创建响应)。
此类实现
pyramid.interfaces.INewResponse
接口。备注
在wsgi中,对响应进行后处理通常会更好地处理。 middleware 组件,而不是由
pyramid.interfaces.INewResponse
事件。这个pyramid.interfaces.INewResponse
事件的存在几乎完全是为了与pyramid.interfaces.INewRequest
事件。
- class BeforeRender(system, rendering_val=None)[源代码]¶
此事件的订阅服务器可能会反省和修改 renderer globals 在他们被传给 renderer . 此事件对象本身具有类似字典的接口,可以用于此目的。例如::
from pyramid.events import subscriber from pyramid.events import BeforeRender @subscriber(BeforeRender) def add_global(event): event['mykey'] = 'foo'
此类型的对象将作为事件发送到 renderer 被调用。
如果订阅者通过添加密钥
__setitem__
它已经存在于renderer globals字典中,它将覆盖那里的旧值。这可能有问题,因为BeforeRender事件的事件订阅服务器不具有任何相对顺序。为了与其他第三方订阅服务器实现最大的互操作性,如果您编写了一个事件订阅服务器,打算用作beforerender订阅服务器,则在设置覆盖值(可以使用.get
或__contains__
事件对象)。从视图返回的词典可以通过
rendering_val
的属性BeforeRender
事件。假设你回来了
{{'mykey': 'somevalue', 'mykey2': 'somevalue2'}}
从你的角度来看,可调用,比如:from pyramid.view import view_config @view_config(renderer='some_renderer') def myview(request): return {'mykey': 'somevalue', 'mykey2': 'somevalue2'}
rendering_val
可用于从BeforeRender
对象:from pyramid.events import subscriber from pyramid.events import BeforeRender @subscriber(BeforeRender) def read_return(event): # {'mykey': 'somevalue'} is returned from the view print(event.rendering_val['mykey'])
换言之,
rendering_val
是视图返回的(非系统)值还是传递给render*
作为value
. 这是Pyramid1.2中的新功能。有关渲染器全局字典中存在值的描述,请参见 渲染期间使用的系统值 .
参见
- update(E, **F)¶
从dict/iterable e和f中更新d。如果e有.keys()方法,则在e:d中对k执行:操作 [k] = e [k] 如果e缺少.keys()方法,则执行:对于e:d中的(k,v) [k] =V。无论哪种情况,后面都是:对于f:d中的k [k] = f [k] .
- clear() None. Remove all items from D. ¶
- copy() a shallow copy of D ¶
- fromkeys(value=None, /)¶
使用iterable中的键和设置为value的值创建新字典。
- get(key, default=None, /)¶
如果键在字典中,则返回键的值,否则为默认值。
- items() a set-like object providing a view on D's items ¶
- keys() a set-like object providing a view on D's keys ¶
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
如果找不到键,则返回默认值(如果给定);否则,引发KeyError。
- popitem()¶
移除(键、值)对并将其作为二元组返回。
对按后进先出(LIFO)顺序返回。如果判定为空,则引发KeyError。
- setdefault(key, default=None, /)¶
如果关键字不在字典中,则插入值为默认值的关键字。
如果键在字典中,则返回键的值,否则为默认值。
- values() an object providing a view on D's values ¶
见 使用事件 有关如何注册订阅这些事件的代码的详细信息。