Flask源碼系列——前身

Flask源碼系列——前身

來自專欄 學Python的桃子

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 的開發者提出了一個modpython 的 Apache module。然後再隨後的幾年和2000年初,apache 裝載了 mod-python 模塊,然後絕大多數的 python web 應用程序都得以運行。然而 mod-python 並不是一個標準的規格,隨著 mod-module 開發的停滯不前和安全隱患被發現, python 社區意識到必須要有一個始終如一運行 python 代碼的方法,因此 wsgi 應運而生。直到現在,WSGI仍然是運行 python web 應用程序的公認方法。

如上圖所示,WSGI 伺服器只是調用在 PEP 3333 標準中定義的 WSGI 應用程序上的可調用對象。

WSGIs 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


推薦閱讀:

TAG:Flask | Python入門 | Python |