Nice! KillTime又添新功能! 添加任意中间件!

前情提要

上次我们提到,Killtime框架确实中间件机制。写完上篇文章后,我就没了头绪,于是耽搁了几天。今晚,我又看了看已经写的代码,思考路由和中间件的关系,中间件到底怎么和路由联系起来! 原来的代码:

可以看出,原来的话,路由使用一个字典传递,直接暴露在外面。 现在呢?且看我的骚操作。

往期文章:

1,终于!我写出了自己的后端框架! - 掘金 (juejin.cn)

2,个人框架KillTime又添新功能!无痛获取表单参数! - 掘金 (juejin.cn)

解铃还须系铃人

既然我是通过dict传递参数,那为什么不能也传递函数、类! 靠!脑子wat了。干了!

可以看出,api方法可以传递路由、一个由中间件函数组成的列表和一个Handler类。传递进行KillTime类内部后,路由大概就是下面这个样子,我们只需要在handler内部处理这个dict就行,Perfect!

是不是想起了什么?没错!就是express框架,毕竟一开始我就想让他往这方面发展,现在终于实现了。 那么内部是怎么处理的呢?且往下看:

内部操作

这里是处理路由的核心代码,routes是Killtime的一个类型为dict的属性,数据由api()方法添加,内部结构就是上一张图片。 url_parse.path是处理过后的路径,比如 "/index"。上面代码的含义是:依次获取中间件列表、处理类,便利中间件列表,依次执行每个函数,如果这个中间件的返回值为False的话,直接退出for。 没成功执行一个中间件,mdw_count++, 最后计算执行的中间件个数是为传入的个数。如果是:执行处理类的get()方法(post请求就执行post方法),如果最后发现有中间件返回了False,则mdw_count < len(中间件列表), 那么就不会执行get方法,而是返回response.json()。

中间件定义

从山上一张图片可以看出,每个middleware传入了一个ctx,用来获取request数据,response的话已经写好了,直接调用response类即可。比如要做校验,可以使用Form类进行操作即可,传入ctx啥都有了。 最后返回True就可以让下一个中间件调用,如果有任何一个中间件返回了False, 那么处理类的get/post方法都不会调用。

说了这么多,不会是个细狗吧?

雄起!男人不能说不行!

雄起

先看代码,下面是中间件返回的False, 没法执行handler类的get方法:

效果:

修改中间件,返回True, 让handler类的get方法执行:

效果:

大功告成! 保命要紧,半夜1点了,睡了。。。

相关推荐
databook5 分钟前
从手动检查到自动监控:一个数据质量工作流的实现
后端·python·数据分析
【JAVA】玩家12 分钟前
Spring核心原理全解析:从零到生产实战
java·后端·spring
东风破_30 分钟前
从 Neo4j 到 GraphRAG:用 Text-to-Cypher 构建图检索 RAG
人工智能·后端
llqbzllll2 小时前
Spring AI 工具调用不是反射一下就结束:用 2.0.1 跑通失败恢复与调用上限
人工智能·后端
北冥有鱼被烹2 小时前
砷化镓与磷化铟:光模块的地基——从化学键到AI缺货潮的底层逻辑
人工智能·python
狼爷3 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
for_ever_love__3 小时前
线性回归与梯度下降——从零手写一个模型
python·机器学习·线性回归·梯度下降
mantou1324 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
程序员老赵4 小时前
Docker 部署 DeepSeek Harness:轻松搭建局域网里的 AI Agent 平台
后端·ai编程·deepseek
code_whiter4 小时前
7.自动化测试常用函数
python·功能测试