- Python Falcon 教程
- Python Falcon - 首頁
- Python Falcon - 簡介
- Python Falcon - 環境搭建
- Python Falcon - WSGI vs ASGI
- Python Falcon - Hello World (WSGI)
- Python Falcon - Waitress
- Python Falcon - ASGI
- Python Falcon - Uvicorn
- Python Falcon - API 測試工具
- 請求 & 響應
- Python Falcon - 資源類
- Python Falcon - 應用類
- Python Falcon - 路由
- Falcon - 字尾響應器
- Python Falcon - Inspect 模組
- Python Falcon - Jinja2 模板
- Python Falcon - Cookie
- Python Falcon - 狀態碼
- Python Falcon - 錯誤處理
- Python Falcon - Hook
- Python Falcon - 中介軟體
- Python Falcon - CORS
- Python Falcon - WebSocket
- Python Falcon - SQLAlchemy 模型
- Python Falcon - 測試
- Python Falcon - 部署
- Python Falcon 有用資源
- Python Falcon - 快速指南
- Python Falcon - 有用資源
- Python Falcon - 討論
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()])