Flask的源码系列——前身
What is Flask?
用了这么久的 Flask 框架,那么 Flask 究竟是什么呢?借用官方文档的一句话来说明这个问题:
Flask is a lightweight WSGI web application framework.
不难理解上面的一句话: Flask 是一个基于 WSGI 的轻量级的应用框架.那么 WSGI 又是什么?
What is WSGI ?
The Web Server Gateway Interface (WSGI) is a simple calling convention for web servers to forward requests to web applications or frameworks written in the Python programming language. ——[ 1 ] WSGI is the Web Server Gateway Interface. It is a specification that describes how a web server communicates with web applications, and how web applications can be chained together to process one request. WSGI is a Python standard described in detail in PEP 3333. ——[ 2 ]
上面三段话翻译过来的大致意思是:
Web 服务器网关接口(WSGI)是一种简单的调用约定,用于 Web 服务器将请求转发到用 Python 编程语言编写的 Web 应用程序或框架。 WSGI 是 Web 服务器网关接口。它描述了 web 服务器如何与 web 应用程序通信,以及如何将 web 应用程序链接在一起处理一个请求。 WSGI 是在 PEP 3333 [3]中详细描述的 Python 标准。
Why is WSGI necessary?
最初的传统的 Web 服务器是没有办法运行 Python 的应用程序的。直到 1990年末,一个 Grisha Trubetskoy 的开发者提出了一个 mod_python 的 Apache module。然后再随后的几年和2000年初,apache 装载了 mod_python 模块,然后绝大多数的 python web 应用程序都得以运行。然而 mod_python 并不是一个标准的规格,随着 mod_module 开发的停滞不前和安全隐患被发现, python 社区意识到必须要有一个始终如一运行 python 代码的方法,因此 wsgi 应运而生。直到现在,WSGI仍然是运行 python web 应用程序的公认方法。

如上图所示,WSGI 服务器只是调用在 PEP 3333 标准中定义的 WSGI 应用程序上的可调用对象。
WSGI's Purpose
所以为什么不直接将 WSGI 服务器直接指向 WSGI 的应用框架呢?
1. **WSGI 能够提供可好的可拓展性.** 基于 WSGI,开发人员可以随时将 Web 组件替换为其他的。比如说由 Green Unicorn 无缝切换到 uWSGI。
2. **WSGI服务器提升了负载规模** 一次为千个请求提供动态内容数是WSGI服务器,而不是框架。 WSGI服务器处理来自Web服务器的处理请求,并决定如何将这些请求传递给应用程序框架的进程。

What is PEP 3333 ?
PEP 3333 一直出现在上文中,那么 PEP 3333 的究竟说了什么呢,有兴趣的读者可以直接点击PEP 3333查看原文。嫌麻烦的话,可以直接看下图,一图胜千言,我花了一点时间将 PEP 3333 中的主要内容整理成了一个简单的脑图

References
[ 1 ] Web Server Gateway Interface
[ 2 ] What is WSGI?
[ 3 ] PEP 3333
[ 4 ] WSGI Servers