Pyramid 事件

2023-03-30 17:42 更新

一個(gè)Pyramid應(yīng)用程序在其運(yùn)行過(guò)程中會(huì)發(fā)出各種事件。盡管這些事件不需要正常使用,但通過(guò)正確處理這些事件可以進(jìn)行一些高級(jí)操作。

一個(gè)由Pyramid框架廣播的事件只有在你用一個(gè)訂閱函數(shù)注冊(cè)后才可以使用。發(fā)出的事件必須被用作 訂閱者 函數(shù)的參數(shù)。

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

然而,只有當(dāng)它在 add_subscriber() 方法的幫助下被添加到應(yīng)用程序的配置中時(shí),訂戶函數(shù)才會(huì)開(kāi)始運(yùn)作,如下所示。

在下面的片段中,應(yīng)用程序被配置為當(dāng)它發(fā)出 NewRequest 對(duì)象時(shí),訂閱者函數(shù)被調(diào)用。

from pyramid.events import NewRequest
config.add_subscriber(mysubscriber, NewRequest)

還有一個(gè)用于配置事件的@subscriber()裝飾器。

from pyramid.events import NewRequest
from pyramid.events import subscriber

@subscriber(NewRequest)
def mysubscriber(event):
   print ("new request")

與裝飾性視圖配置一樣,這里也必須執(zhí)行config.scan()才能使裝飾器有效。

如前所述,Pyramid應(yīng)用程序會(huì)發(fā)出各種事件類型。這些事件類在 pyramid.event 模塊中可用。它們被列舉如下

  • ApplicationCreated – 當(dāng)Config.make_wsgi_app()方法被調(diào)用以返回WSGI應(yīng)用程序?qū)ο髸r(shí),該事件就會(huì)被傳送。
  • NewRequest – 每當(dāng)Pyramid應(yīng)用程序開(kāi)始處理一個(gè)傳入的請(qǐng)求時(shí),就會(huì)發(fā)出這個(gè)事件類的一個(gè)對(duì)象。這個(gè)對(duì)象有一個(gè)請(qǐng)求屬性,是由WSGI環(huán)境字典提供的請(qǐng)求對(duì)象。
  • ContextFound – 應(yīng)用程序的路由器會(huì)遍歷所有的路由,并找到與URL模式相匹配的合適對(duì)象。這時(shí)ContextFound類的對(duì)象被實(shí)例化。
  • BeforeTraversal – 這個(gè)類的實(shí)例在Pyramid路由器試圖找到路由對(duì)象后,但在執(zhí)行任何遍歷或視圖代碼之前,作為一個(gè)事件被排放出來(lái)。
  • NewResponse – 顧名思義,當(dāng)任何Pyramid視圖的可調(diào)用性返回一個(gè)響應(yīng)時(shí),這個(gè)事件就會(huì)被引發(fā)。這個(gè)對(duì)象有請(qǐng)求和響應(yīng)屬性。
  • BeforeRender – 這種類型的對(duì)象在渲染器被調(diào)用之前作為一個(gè)事件被傳送。該事件的訂閱函數(shù)可以訪問(wèn)應(yīng)用程序的全局?jǐn)?shù)據(jù)(以dict對(duì)象的形式),并可以修改一個(gè)或多個(gè)鍵的值。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)