- Python Falcon教程
- Python Falcon - 主页
- Python Falcon - 简介
- Python Falcon - 环境设置
- Python Falcon - WSGI 与 ASGI
- Python Falcon - Hello World(WSGI)
- Python Falcon - 女服务员
- Python Falcon - ASGI
- 蟒蛇Falcon - Uvicorn
- Python Falcon - API 测试工具
- 请求与响应
- Python Falcon - 资源类
- Python Falcon - 应用程序类
- Python Falcon - 路由
- Falcon - 后缀响应者
- Python Falcon - 检查模块
- Python Falcon - Jinja2 模板
- Python Falcon - cookie
- Python Falcon - 状态代码
- Python Falcon - 错误处理
- Python Falcon - 钩子
- 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, resources, params) - 路由后处理请求。可以传递表示从路由的 URI 模板字段派生的任何附加参数的dict对象。
process_response (self, req, resp, Resource, req_succeeded) - 此方法用于响应的后处理(路由后)。如果没有引发异常,则req_succeeded参数为 True,否则为 False。
对于 ASGI 应用程序,除了上述方法之外,中间件类还可以定义更多方法。
为了考虑生命周期事件(ASGI 规范的可选部分),可以包括启动和关闭事件处理程序。
process_startup (self, range, event) - 此方法处理 ASGI 生命周期启动事件。当服务器准备好启动并接收连接时(但在它开始执行此操作之前)将调用它。
process_shutdown(self, range, event) - 此方法处理 ASGI 生命周期关闭事件。当服务器停止接受连接并关闭所有活动连接时调用它。
由于 ASGI 应用程序还响应 Websocket 协议下的请求,因此中间件可以定义以下协程方法 -
process_request_ws (self, req, ws) - 此方法在路由之前处理 WebSocket 握手请求。
process_resource_ws (self, req, ws, resource, params) - 此方法在路由后处理 WebSocket 握手请求。从路由的 URI 模板字段派生的字典对象可以传递给资源的响应者。
中间件类的实例必须在初始化时添加到 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()])