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 个。