Growler中间件开发实战:从零开始创建自定义功能模块

发布时间:2026/9/25 6:35:53

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),仅供参考

相关新闻

mir_eval与行业标准对比:为什么它是MIR算法评估的首选工具

mir_eval与行业标准对比:为什么它是MIR算法评估的首选工具

2026/9/1 18:43:07

mir_eval与行业标准对比:为什么它是MIR算法评估的首选工具 【免费下载链接】mir_eval Evaluation functions for music/audio information retrieval/signal processing algorithms. 项目地址: https://gitcode.com/gh_mirrors/mi/mir_eval mir_eval是一款专…

工业质检中的螺栓实时识别技术实践

工业质检中的螺栓实时识别技术实践

2026/9/9 0:15:38

1. 项目背景与核心价值螺栓识别在工业质检领域一直是个既基础又关键的环节。去年我在某汽车零部件厂调研时,产线主管指着检测工位抱怨:"人工目检螺栓漏拧平均每天要返工3-4次,每次停线至少20分钟"。这正是"实时识别螺栓2"…

测试转大模型:能写自动化用例的人,为什么在生产环境栽跟头?

测试转大模型:能写自动化用例的人,为什么在生产环境栽跟头?

2026/9/3 8:01:18

聊《同样转大模型,测试背景的优势和短板分别是什么?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要去年我带团队接入一个 Agent 项目,测试同学写了三千多条自动化用例&…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/23 22:20:06

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/23 14:32:22

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/24 3:39:17

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/23 14:31:31

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/24 7:10:52

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/23 14:34:03

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/24 16:02:49

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/21 23:38:13

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/25 4:22:14

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…