Python Falcon - 中介軟體



“中介軟體”是一個函式,它在處理每個請求(在任何特定響應器處理之前)以及在返回每個響應之前進行處理。此函式接收進入應用程式的每個請求。

中介軟體的工作方式類似於鉤子。但是,與鉤子不同,中介軟體方法全域性應用於整個應用程式。它可以透過執行其中定義的程式碼來對請求執行某些處理,然後將請求傳遞給相應的操作函式進行處理。它還可以處理操作函式生成的響應,然後再將其返回。

中介軟體是一個類,它實現了一個或多個以下事件處理程式方法。對於 WSGI 應用程式,這些方法為:

  • process_request (self, req, resp) − 此方法在路由請求之前處理請求。

  • process_resource (self, req, resp, resource, params) − 路由後處理請求。可以傳遞一個dict物件,該物件表示從路由的URI模板欄位派生的任何附加引數。

  • process_response (self, req, resp, resource, req_succeeded) − 此方法用於響應的後處理(路由之後)。如果未引發異常,則req_succeeded引數為 True,否則為 False。

對於 ASGI 應用程式,除了上述方法外,中介軟體類還可以定義更多方法。

為了解釋 ASGI 規範的可選部分生命週期事件,可以包含啟動和關閉事件處理程式。

  • process_startup (self, scope, event) − 此方法處理 ASGI 生命週期啟動事件。當伺服器準備好啟動並接收連線但尚未開始這樣做時,會呼叫它。

  • process_shutdown(self, scope, event) − 此方法處理 ASGI 生命週期關閉事件。當伺服器停止接受連線並關閉所有活動連線時,會呼叫它。

由於 ASGI 應用程式也響應 WebSocket 協議下的請求,因此中介軟體可以定義以下協程方法:

  • process_request_ws (self, req, ws) − 此方法在路由 WebSocket 握手請求之前處理它。

  • process_resource_ws (self, req, ws, resource, params) − 此方法在路由後處理 WebSocket 握手請求。可以將從路由的 URI 模板欄位派生的 dict 物件傳遞給資源的響應器。

中介軟體類的例項必須在初始化時新增到 Falcon 應用程式物件中。對於 WSGI Falcon 應用程式:

class MyMiddleware:
   def process_request(self, req, resp):
      pass
   def process_resource(self, req, resp, resource, params):
      pass
   def process_response(self, req, resp, resource, req_succeeded):
      pass
from falcon import App
app=App(middleware=[MyMiddleware()])

對於 ASGI 應用程式:

class MyMiddleware:
   async def process_startup(self, scope, event):
      pass
   async def process_shutdown(self, scope, event):
      pass
   async def process_request(self, req, resp):
      pass
   async def process_resource(self, req, resp, resource, params):
      pass
   async def process_response(self, req, resp, resource, req_succeeded):
      pass
   async def process_request_ws(self, req, ws):
      pass
   async def process_resource_ws(self, req, ws, resource, params):
      pass
from falcon.asgi import App
app=App(middleware=[MyMiddleware()])
廣告
© . All rights reserved.