Python Falcon 中间件

Python Falcon 中间件

一个 “中间件 “ 是一个函数,在每个请求(在被任何特定的响应者处理之前)和每个响应返回之前都会被处理。这个函数接收来到你的应用程序的每个请求。

中间件的工作与钩子类似。然而,与钩子不同的是,中间件方法适用于整个应用程序。它可以通过运行其中定义的代码对请求进行一些处理,然后把要处理的请求传递给相应的操作函数。它也可以在返回之前处理由操作函数产生的响应。

一个中间件是一个实现了一个或多个以下甚至处理方法的类。对于一个WSGI应用程序,这些方法是–

  • process_request (self, req, resp) – 这个方法在路由之前处理请求。

  • process_resource (self, req, resp, resource, params) – 在路由之后处理请求。一个代表从路由的URI模板字段导出的任何额外参数的 dict 对象可以被传递。

  • 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协议下的请求,中间件可以定义以下coroutine方法:

  • 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()])

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程