Python Pyramid 简明教程

Python Pyramid - Events

Pyramid 应用程序在它的生命周期中发出多种事件。虽然这些事件通常不需要被使用完,通过适当处理这些事件可以执行稍微高级的操作。

Pyramid 框架广播的事件仅在您用某个订阅者函数注册这个事件时才开始有用。必须将发出的事件用作 subscriber 函数的参数。

def mysubscriber(event):
   print("new request")

然而,只有将订阅者函数添加到应用程序配置中后,它才会开始运作,添加方法如下所示 −

在下面的代码段中,应用程序配置为订阅者函数在发出 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 模块内。它们如下所示 −

  1. ApplicationCreated − 当调用 Configurator 类的 config.make_wsgi_app() 方法以返回 WSGI 应用程序对象时,才传播这个事件。

  2. NewRequest − 每当 Pyramid 应用程序开始处理一个传入请求时,就会发出这个事件类的对象。这个对象有一个 request 属性,它是由 WSGI 环境词典提供的请求对象。

  3. ContextFound − 应用程序的路由器遍历所有路由并找到与 URL 模式的匹配项。此时将实例化 ContextFound 类的对象。

  4. BeforeTraversal − 当 Pyramid 路由器尝试找到一个路由对象,但在执行任何遍历或视图代码之前,将发出此类的实例作为事件发送。

  5. NewResponse − 正如名称表明的那样,每当任何 Pyramid 视图可调用返回一个响应时,就会引发这个事件。这个对象具有 request 和 response 属性。

  6. BeforeRender − 当在调用呈现器之前,将将此类型的对象作为事件转发。对这个事件的订阅者函数可以访问应用程序的全局数据(它采用 dict 对象的形式),并且可以修改一个或多个键的值。