打算对 Flask 的学习做个整理,以 Flask 的 GitHub 代码库的 master 分支为参考。其实早期的 0.3 版还是单文件,整个 flask.py 加上注释也只有 1426 行代码,非常简洁,很适合作为 Python 源码学习的教材。

拿到源码先不着急,就像读书一样,不妨浏览下目录,以便有个全局的了解。Flask 的源码有一个非常好的优点,就是它的注释非常完备,即使不看源码,只看注释,也能有个大概的理解。

从 Flask 根目录下的 setup.py 可以看到,Flask 依赖的组件主要有 3 个:

  • Werkzeug:一个 HTTP 和 WSGI 的工具集;
  • Jinja2:Python 的前端模板引擎;
  • itsdangerous:处理并传递可信数据的辅助函数集;

Flask 的核心代码都在 flask 目录下,其目录结构如下:

flask
├── ext
│   └── __init__.py     flask 扩展
├── __init__.py         导入模块
├── __main__.py         命令行运行
├── _compat.py          Py2/3 兼容性模块
├── app.py              核心模块
├── blueprints.py       蓝图模块
├── cli.py              命令行支持模块
├── config.py           flask 配置模块
├── ctx.py              flask context 模块
├── debughelpers.py     debug 辅助函数
├── exthook.py          flask 扩展迁移,flaskext.foo 迁移到 flask_foo
├── globals.py          flask 全局变量模块,包括 `g`,`current_app`,`request`
├── helpers.py          辅助函数模块
├── json.py             JSON 支持模块
├── logging.py          日志模块
├── sessions.py         基于 itsdangerous 的 cookie 和 session 模块
├── signals.py          基于 blinker 的信号模块
├── templating.py       桥接 Jinja2 的模板模块
├── testing.py          测试模块
├── views.py            view_func 模块
└── wrappers.py         WSGI request 和 response 的封装模块

参考资料: