Pyramid 事件

2023-03-30 17:42 更新

一个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对象的形式),并可以修改一个或多个键的值。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号