Python Pyramid 事件
一个Pyramid应用程序在其运行过程中会发出各种事件。尽管这些事件不需要正常使用,但通过正确处理这些事件可以进行一些高级操作。
一个由Pyramid框架广播的事件只有在你用一个订阅函数注册后才可以使用。发出的事件必须被用作 订阅者 函数的参数。
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 – 当Config.make_wsgi_app()方法被调用以返回WSGI应用程序对象时,该事件就会被传送。
-
NewRequest – 每当Pyramid应用程序开始处理一个传入的请求时,就会发出这个事件类的一个对象。这个对象有一个请求属性,是由WSGI环境字典提供的请求对象。
-
ContextFound – 应用程序的路由器会遍历所有的路由,并找到与URL模式相匹配的合适对象。这时ContextFound类的对象被实例化。
-
BeforeTraversal – 这个类的实例在Pyramid路由器试图找到路由对象后,但在执行任何遍历或视图代码之前,作为一个事件被排放出来。
-
NewResponse – 顾名思义,当任何Pyramid视图的可调用性返回一个响应时,这个事件就会被引发。这个对象有请求和响应属性。
-
BeforeRender – 这种类型的对象在渲染器被调用之前作为一个事件被传送。该事件的订阅函数可以访问应用程序的全局数据(以dict对象的形式),并可以修改一个或多个键的值。