Python Pyramid 事件
Pyramid应用程序在其生命周期中会发出各种事件。虽然这些事件通常不需要使用完全,但通过正确处理这些事件可以执行稍微高级的操作。
由Pyramid框架广播的事件只有在您使用一个订阅函数进行注册时才能使用。发出的事件必须作为 subscriber 函数的参数使用。
def mysubscriber(event):
print("new request")
然而,只有当订阅函数通过 add_subscriber() 方法添加到应用程序的配置中时,它才变得可用,如下所示:
在下面的片段中,应用程序的配置使得当 NewRequest 对象发出时,订阅函数会被调用。
from pyramid.events import NewRequest
config.add_subscriber(mysubscriber, NewRequest)
还有一个@subscriber()装饰器用于配置事件。
from pyramid.events import NewRequest
from pyramid.events import subscriber
@subscriber(NewRequest)
def mysubscriber(event):
print ("new request")
和装饰视图配置一样,在这里也必须执行config.scan()才能使装饰器生效。
如前所述,Pyramid应用程序发出各种事件类型。这些事件类在以下模块中可用: pyramid.event 模块。它们如下所示:
-
ApplicationCreated - 当调用Configurator类的config.make_wsgi_app()方法返回WSGI应用程序对象时,会传输此事件。
-
NewRequest - 每次Pyramid应用程序开始处理传入请求时,都会发出此事件类的对象。此对象具有一个request属性,该属性是由WSGI环境字典提供的请求对象。
-
ContextFound - 应用程序的路由器遍历所有路由,并找到与URL模式相匹配的适当对象时,会实例化ContextFound类的对象。
-
BeforeTraversal - 在Pyramid路由器尝试找到路由对象但在执行任何遍历或视图代码之前,会作为事件发出此类的一个实例。
-
NewResponse - 如名称所示,每当任何Pyramid视图可调用返回响应时,都会引发此事件。此对象具有请求和响应属性。
-
BeforeRender - 在渲染器被调用之前,将以事件的形式传输此类型的对象。订阅器函数可以访问应用程序的全局数据(以dict对象的形式)并可以修改一个或多个键的值。