Microdot:又一个 Python Web 框架

Microdot:又一个 Python Web 框架

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

Microdot 2.0 是专为 MicroPython 设计的轻量级 Python Web 框架,语法类似 Flask,但无应用/请求上下文,完全异步,支持 WebSocket、SSE、模板、CORS 和 JWT 会话。核心仅 728 行代码,完整版约 1577 行,远小于 Flask 和 FastAPI。适合 MicroPython 项目,CPython 用户若满意现有框架则无需迁移。

🔎

延伸解读

Microdot 的诞生背景与定位

Microdot 源于作者在 ESP8266 硬件项目中的实际需求:当时 MicroPython 生态缺乏可用的 Web 框架,Flask 等因体积过大无法运行,而 picoweb 需要非官方分支。因此,Microdot 被设计为在官方 MicroPython 上运行、语法接近 Flask 的轻量级替代品。它填补了 MicroPython 在 Web 框架方面的空白,尤其适合资源受限的微控制器项目。

与 Flask 和 FastAPI 的体量对比

文章通过 cloc 统计显示,Microdot 核心仅 728 行代码,完整版约 1577 行;而 Flask 加 Werkzeug 约 15558 行,FastAPI 加 Starlette 约 14808 行。Microdot 的代码量约为两者的 10%,若仅需基本路由则仅 5%。这种模块化设计让开发者能按需选择功能,在 MicroPython 上尤其重要,因为可以剔除不需要的部分以节省空间。

异步设计与无上下文特性

Microdot 2.0 完全异步,处理函数推荐使用 async def。在 CPython 下,普通 def 函数会在线程执行器中运行(类似 FastAPI),但在缺乏线程支持的 MicroPython 设备上会阻塞。此外,Microdot 摒弃了 Flask 的应用/请求上下文,请求对象直接作为参数传入,减少了隐式复杂度,使代码更直观。

迁移建议与适用场景

作者明确建议:MicroPython 项目非常适合使用 Microdot;CPython 用户若对现有框架满意则无需迁移,除非想通过节省内存来在相同硬件上运行更多工作进程。迁移应仅当体积或资源非常关键时才考虑。对于新项目,作者希望开发者能将 Microdot 纳入考量。

❓

Q&A

Microdot 是什么?它有什么特点?

Microdot 是一个专为 MicroPython 设计的轻量级 Python Web 框架,语法类似 Flask,但完全异步,支持 WebSocket、SSE、模板、CORS 和 JWT 会话。核心仅 728 行代码,完整版约 1577 行,远小于 Flask 和 FastAPI。

为什么作者要开发 Microdot?

2019 年,作者在 ESP8266 硬件项目中使用 MicroPython,需要一个小型 Web 框架,但 Flask、Bottle 等太大无法运行,唯一可用的 picoweb 需要非官方 MicroPython 分支。因此作者创建了 Microdot,旨在提供一个接近 Flask 且能在官方 MicroPython 上运行的框架。

Microdot 的代码规模有多大?与 Flask 和 FastAPI 相比如何?

Microdot 核心仅 728 行代码,完整版约 1577 行。而 Flask 加 Werkzeug 约 15558 行,FastAPI 加 Starlette 约 14808 行。Microdot 大约是它们大小的 10%,如果只需要基本路由功能,则只有 5%。

Microdot 支持哪些功能?

Microdot 支持 Flask 式路由、异步处理、WebSocket、Server-Sent Events (SSE)、模板(Jinja 或 uTemplate)、CORS、基于 JWT 的用户会话、测试客户端,并自带微型 Web 服务器(MicroPython)或集成 ASGI/WSGI 服务器(CPython)。

我应该从 Flask 或 FastAPI 切换到 Microdot 吗?

如果你使用 CPython 且对现有框架满意,建议不要切换。但如果你需要节省服务器资源,Microdot 可能帮助你在相同硬件上运行更多工作进程。对于 MicroPython 项目,Microdot 是一个很好的选择。

Microdot 如何处理请求和响应?

Microdot 使用装饰器定义路由,处理函数接收 request 对象作为第一个参数。返回字典会自动转为 JSON,还可以返回状态码和头信息。支持生成器实现流式响应,也支持异步生成器。

🏷️

标签

➡️

继续阅读