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 應用程式開始處理傳入請求時,都會發出此事件類的一個物件。此物件具有一個request屬性,該屬性是由 WSGI 環境字典提供的請求物件。

  • ContextFound - 應用程式的路由器遍歷所有路由並找到與 URL 模式的適當匹配。這就是 ContextFound 類物件例項化的時候。

  • BeforeTraversal - 在 Pyramid 路由器嘗試查詢路由物件之後但執行任何遍歷或檢視程式碼之前,會發出此類的例項作為事件。

  • NewResponse - 正如名稱所示,每當任何 Pyramid 檢視可呼叫物件返回響應時,都會引發此事件。此物件具有request和response屬性。

  • BeforeRender - 在呼叫渲染器之前,會將此型別的物件作為事件傳輸。此事件的訂閱者函式可以訪問應用程式的全域性資料(以 dict 物件的形式),並可以修改一個或多個鍵的值。

廣告