Bottle 是一个快速,简单和轻量级的 WSGI 微型 Web 框架的 Python。它作为单个文件模块分发,除了 Python 标准库之外没有依赖关系。
选择源码分析的版本是 Release 于 2009 年 7 月 11 日的 0.4.10 (这是我能找到的最早的发布版本了)。
为什么要分析 Bottle 这个比较冷门的框架?
Bottle 从发布至今一直贯彻的微型 Web 框架的理念。
Bottle 一直坚持单文件发布,也就是只有一个 bottle.py 文件。
除了 Python 标准库之外没有依赖关系。
与 Flask、Django 都遵循 PEP-3333 的 WSGI 协议。
0.4.10 版本代码量小,加上大量注释也只有不到 1000 行的代码。
所以,抛开框架的高级功能,单单从一个 Web 框架怎么处理请求的角度来看,Bottle 是最佳的选择。
Flask 从第一版开始就是依赖于 werkzeug 实现,更多的实现细节需要从 werkzeug 中查找。
Django 是个重型框架,不适合整体代码阅读,各个组件看看就可以。
Tornado 是个异类,和 WSGI 没有什么关系。
在阅读之前最好从 Github 上下载一份 0.4.10 版本的 Bottle 的源码,边看边阅读本文。
熟悉 Python 的语法
熟悉 HTTP 协议
至少使用过一种 WSGI 的框架
了解 CGI
看得懂中文
流程结构分析
代码虽然不多,但是毫无目的的看难免思绪混乱,会看的心烦意乱,甚至会有产生「写的这是什么鬼?」的想法。
一个 Web 框架最核心也是最基本的功能就是处理 请求 和 响应。
但是在这之前,需要先创建一个 Server,才能开始处理啊!
所以大体的流程如下:
怎么创建一个 WSGI 的 Server 。
怎么处理到来的请求。
怎么处理响应。
创建 WSGI Server
在 Bottle 中关于创建一个标准的 WSGI Server 涉及的类或者方法只有 3 个。