行业资讯
📅 2026/8/6 22:21:55
Growler中间件开发实战:从零开始创建自定义功能模块
Growler中间件开发实战从零开始创建自定义功能模块【免费下载链接】GrowlerA micro web-framework using asyncio coroutines and chained middleware.项目地址: https://gitcode.com/gh_mirrors/gr/GrowlerGrowler是一个基于asyncio协程和链式中间件的微型Web框架它允许开发者通过中间件扩展应用功能。本文将带你从零开始创建自定义中间件掌握Growler中间件的核心开发技巧和最佳实践。一、认识Growler中间件Growler中间件是处理HTTP请求的核心组件采用链式调用模式。每个中间件可以对请求/响应对象进行修改或执行特定任务后将控制权传递给下一个中间件。在Growler应用中中间件通过app.use()方法添加到请求处理链中app.use(middleware_function, path/)Growler框架提供了多种内置中间件如静态文件服务请求时间记录会话管理Cookie解析二、中间件开发基础2.1 中间件基本结构Growler中间件可以是函数或类实例最常用的是类实现方式。一个标准的中间件类应包含__call__方法class CustomMiddleware: def __init__(self, optionsNone): # 初始化中间件配置 self.options options or {} async def __call__(self, req, res, next): # 中间件逻辑处理 try: # 执行前置处理 await self.process_request(req, res) # 调用下一个中间件 await next() # 执行后置处理 await self.process_response(req, res) except Exception as err: # 错误处理 res.status 500 await res.send(fError: {err})2.2 核心参数解析req: 请求对象包含HTTP请求信息res: 响应对象用于构建HTTP响应next: 调用下一个中间件的函数必须显式调用以继续中间件链三、实战创建自定义日志中间件让我们创建一个记录请求详细信息的日志中间件完整实现步骤如下3.1 创建中间件文件在项目中创建growler/middleware/requestlogger.py文件import logging from datetime import datetime class RequestLogger: def __init__(self, loggerNone): self.logger logger or logging.getLogger(__name__) self.logger.setLevel(logging.INFO) async def __call__(self, req, res, next): start_time datetime.now() # 调用下一个中间件 await next() # 计算请求处理时间 duration (datetime.now() - start_time).total_seconds() * 1000 # 记录请求信息 self.logger.info( f[{req.method}] {req.path} - {res.status} f({duration:.2f}ms) )3.2 在应用中使用中间件在应用代码中导入并使用自定义中间件from growler import App from growler.middleware.requestlogger import RequestLogger app App(MyApp) # 添加自定义日志中间件 app.use(RequestLogger()) # 添加路由处理 app.get(/) async def home(req, res): await res.send(Hello, Growler!) if __name__ __main__: app.run(hostlocalhost, port8000)3.3 中间件高级功能为中间件添加配置选项使其更加灵活# 在RequestLogger类中添加 def set_log_format(self, fmt): 设置日志格式 handler logging.StreamHandler() handler.setFormatter(logging.Formatter(fmt)) self.logger.addHandler(handler) return self # 使用时 app.use( RequestLogger() .set_log_format(%(asctime)s - %(message)s) )四、中间件最佳实践4.1 中间件顺序很重要中间件执行顺序与添加顺序一致需注意依赖关系先添加通用中间件日志、CORS再添加解析类中间件Cookie、Session最后添加业务逻辑中间件4.2 错误处理机制实现全局错误处理中间件捕获异常class ErrorHandler: async def __call__(self, req, res, next): try: await next() if res.status 404: await res.send(Page not found) except Exception as err: res.status 500 await res.send(fServer error: {str(err)})4.3 性能优化建议避免在中间件中执行耗时操作使用async/await处理异步任务对频繁访问的数据进行缓存五、调试与测试中间件5.1 查看中间件链使用print_middleware_tree()方法查看应用的中间件结构app.print_middleware_tree()5.2 编写单元测试在tests/middleware/test_requestlogger.py中添加测试from growler.middleware.requestlogger import RequestLogger import logging from unittest.mock import Mock def test_request_logger(): logger Mock(speclogging.Logger) middleware RequestLogger(logger) # 创建模拟请求/响应对象 req Mock(methodGET, path/test) res Mock(status200) next_mw Mock(return_valueasyncio.sleep(0)) # 执行中间件 asyncio.run(middleware(req, res, next_mw)) # 验证日志是否被正确调用 assert logger.info.called六、总结与扩展通过本文学习你已经掌握了Growler中间件的开发方法。中间件是Growler框架的核心扩展机制通过组合不同的中间件可以快速构建功能丰富的Web应用。Growler还提供了中间件基类和工具函数帮助开发者创建更复杂的中间件。建议参考官方文档docs/了解更多高级特性。现在你可以尝试开发更多实用的中间件如身份验证中间件请求速率限制中间件JSON请求解析中间件开始你的Growler中间件开发之旅吧【免费下载链接】GrowlerA micro web-framework using asyncio coroutines and chained middleware.项目地址: https://gitcode.com/gh_mirrors/gr/Growler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考