个人框架KillTime又添新功能!无痛获取表单参数!

前情提要

上篇文章详细阐述了killtime这个mini框架的实现,并说明了框架的现有功能和不足。我是思来想去,总觉得还差点什么。想了想springboot那种自动获取参数的能力,心里就发痒,我也要写一个!

开工

springboot的那种获取参数的方法我是不知道,大概率是什么反射、依赖注入,反正我也不懂,看看怎么搞吧。偶然想起来Python还有一个装饰器的功能,这不就解决了吗!perfect!

装饰器结构

python 复制代码
# 最外层为装饰器参数
def log(msg: str):
    # original为被装饰函数
    def decorator(original):
        # 核心代码,
        def wrapper(*args, **kwargs):
            # 返回之前进行其他操作,比如日志、校验等
            // code
            # 返回原来的函数
            return original(*args, **kwargs)  
        return wrapper
    return decorator

@log("age = 120")
def xxx(msg):
    print(f"get方法: {msg}")

if __name__ == '__main__':
    xxx("age = 16")

装饰器说简单也简单,说难也难。上面代码是gpt给的框架,直接在无脑套用就行!

装饰我们的Handler类

先上主代码

路由/upload的处理类就是FileUploader类,下面上代码:

从上面可以看出,定义了一个dict,用于获取数据。一个问题?为什么是dict而不是简单的一个变量?这和python有关!

简单来说,需要传入dict / tuple / list类型,函数才能真正修改传入的参数! 要知道,装饰器就是一个函数!那么装饰器函数要想将处理好的数据传递到外面,需要调用者传入以上类型。其中dict类型和form的key-value恰好对应,于是就选择了dict作为该类型!

getFormHandler

getFormHandler做的东西不多,主要是分析url并取出其中的key-value。 由于已经定义过Form工具类,直接使用Form里的方法: 先遍历传进来的dict,获取其中的key, 然后使用Form.getFormValue()方法即可! Form类可以参考上一篇文章: 终于!我写出了自己的后端框架! - 掘金 (juejin.cn)

上效果

看上去效果还不错,和以前手动获取参数简单了不少!

后续

目前只是实现了get方法的参数截获,后续会陆续实现post方法表单和文件的截获。你好,再见!

相关推荐
呱呱复呱呱4 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽9 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码9 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱18 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵20 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817531 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维