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 应用程序开始处理传入请求时,都会发出此事件类的对象。 这个对象有一个请求属性,它是 WSGI 环境字典提供的请求对象。

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

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

  • NewResponse − 顾名思义,每当任何 Pyramid 视图可调用返回响应时都会引发此事件。 此对象具有请求和响应属性。

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