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 - 当调用 Configurator 类的 config.make_wsgi_app() 方法以返回 WSGI 应用程序对象时传输此事件。

  • NewRequest - 每次 Pyramid 应用程序开始处理传入请求时都会发出此事件类的对象。该对象有一个请求属性,它是 WSGI 环境字典提供的请求对象。

  • ContextFound - 应用程序的路由器遍历所有路由并找到与 URL 模式的适当匹配。这是 ContextFound 类的对象被实例化的时候。

  • BeforeTraversal - 在 Pyramid 路由器尝试查找路由对象之后但在执行任何遍历或视图代码之前,此类的实例作为事件发出。

  • NewResponse - 顾名思义,只要任何可调用的Pyramid视图返回响应,就会引发此事件。该对象具有请求和响应属性。

  • BeforeRender - 这种类型的对象在调用渲染器之前作为事件传输。该事件的订阅者函数可以访问应用程序的全局数据(以字典对象的形式),并且可以修改一个或多个键的值。