<commit_before>
## flask 0.1 版本说明:

### 点评:

- 0.1 版本的代码,删掉源码原有注释,估计总共不到300行.
- 300多行,实现一个 web 框架, 令人惊叹!
- 虽然部分实现依赖了 werkzeug 和 jinja2 两个强大的包. 但已把 web框架 核心模块逻辑清楚展现.
- 0.1 版本的源码, 全都在一个文件中. 可以非常清晰的 理清 web 框架的调用逻辑
- 对比: bottle.py 的 第一版, 结构就没那么清晰.(费了好大劲,才搞清楚各模块的调用关系)
- 潜在原因: 因为已经用 flask 实际开发过比较久,所以各常用模块,非常熟悉.
- 这方面对快速理解源码有辅助作用.

### 源码结构图:

- 待更新


## flask 0.4 版本说明:

### 点评:

- 待更新


### 源码结构图:

- 待更新



## Web 知识点补缺:

- [flask 中的 上下文 g, session 实现]()

- [理解WSGI]():
    - [WSGI-维基](https://zh.wikipedia.org/wiki/Web%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BD%91%E5%85%B3%E6%8E%A5%E5%8F%A3)
    - [戏说WSGI（Python Web服务网关接口）](http://www.cnblogs.com/holbrook/archive/2012/02/25/2357337.html)
    - [WSGI 是什么 以及如何使用](http://zsl-oo7.blog.163.com/blog/static/353297032013111510441430/)<commit_msg>update - some tips.<commit_after>
## flask 0.1 版本说明:

### 点评:

- 0.1 版本的代码,删掉源码原有注释,估计总共不到300行.
- 300多行,实现一个 web 框架, 令人惊叹!
- 虽然部分实现依赖了 werkzeug 和 jinja2 两个强大的包. 但已把 web框架 核心模块逻辑清楚展现.
- 0.1 版本的源码, 全都在一个文件中. 可以非常清晰的 理清 web 框架的调用逻辑
- 对比: bottle.py 的 第一版, 结构就没那么清晰.(费了好大劲,才搞清楚各模块的调用关系)
- 潜在原因: 因为已经用 flask 实际开发过比较久,所以各常用模块,非常熟悉.
- 这方面对快速理解源码有辅助作用.

### 源码结构图:

- 待更新


## flask 0.4 版本说明:

### 点评:

- 待更新


### 源码结构图:

- 待更新



## Web 知识点补缺:

- [flask 中的 上下文 g, session 实现]()

- [理解WSGI]():
    - [WSGI-维基](https://zh.wikipedia.org/wiki/Web%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BD%91%E5%85%B3%E6%8E%A5%E5%8F%A3)
    - [戏说WSGI（Python Web服务网关接口）](http://www.cnblogs.com/holbrook/archive/2012/02/25/2357337.html)
    - [WSGI 是什么 以及如何使用](http://zsl-oo7.blog.163.com/blog/static/353297032013111510441430/)


## 源码阅读经验总结:

- 通读, 这一步, 建立对代码的整体印象, 但是实际效果有限, 收获20%的简单部分
- 大部分代码, 模块, 属于不太重要的, 很简单, 读过即可
- 少数模块, 属于核心模块(通常都是难懂的部分), 需要精读, 花大量时间深入读, 不要畏难.
- 核心模块的代码, 很难懂, 要硬着头皮一点点啃, 否则, 就失去阅读源码的价值. (难点,全没搞懂,等于白读)
- 八二定则: 80%的精力, 应该花在 阅读 20% 的关键代码上.
- 带着问题,针对性阅读重要模块.
    - 教训: 某次面试, 被问到 flask 中 g, session 实现, 发现 记忆很模糊,不敢答.结果回来发现,原来读源码的时候,没有重视这几个点
    - 重新带着问题读, 发现深入 核心模块, 收获很多.
    - 待着问题读, 通常目标明确, 为了搞明白某些问题, 就会深入读, 不会浮光掠影
    - 盲目的读, 通常很多代码, 看过去, 表面上看得懂, 但是, 并没有理解 这些 操作步骤 背后的逻辑和思想.(丢失了最有价值的部分)
{'fraction_non_alphanumeric': 0.17518248175182483, 'fraction_numerical': 0.08175182481751825, 'mean_word_length': 3.6940639269406392, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2229668', 'n_tokens_mistral': 1727, 'n_tokens_neox': 1833, 'n_words': 178}