Django 是一個 web framework。前面的 web 代表它是用來做網路相關的,可是 framework 是什麼意思?我很喜歡一個忘了在哪裡看到的說法:[註 1]
Framework 是一個框架,幫你把程式的架構都建好,等你填你需要的邏輯進去。Framework 會負責在合適的時機呼叫你寫的程式,而不是讓你自行呼叫合適的函式,以搭建程式本身。
也就是說,當你基於一個 framework 撰寫程式時,是 framework 用你的程式,在執行時達成目標;相對地,不使用 framework 時,則是你的程式使用某些函式(可能來自函式庫)來達成目標。
好喔,那 Django 到底是怎麼用你的程式?這就要從 WSGI 開始說起。
絕大多數用 Python 寫成的網路服務,在本質上都是一個 WSGI 應用程式。WSGI,亦即「web server gateway interface」,是一個由 Python 官方制定,用來統一伺服器程式與 Python 程式之間溝通方式的標準。
如果你想多了解 WSGI,可以參考上面的官網連結,以及維基百科條目。如果你還沒興趣那麼深入,就繼續看下去吧。
每個 WSGI 應用程式,都需要搭配一個 WSGI 伺服器來執行。當一個 WSGI 伺服器被啟動時,會進行以下的動作:
- 初始化。
- 設定環境變數等執行參數。
- 找到與它對應的 WSGI 應用程式。
- 進入一個迴圈,不斷等待來自網路的請求(requests)。
- 當得到請求時,呼叫 WSGI 應用程式,並告知該請求內部的參數與資料。
- 回到迴圈。
- 重複 2—4,直到使用者或系統要求它停止。
當你建立一個 Django 專案時,Django 會自動幫你產生一個 WSGI 應用程式。你寫的所有程式,都不會被直接使用,而是由那個 WSGI 程式在執行時,視需求自動 import
元件來使用。所以當你使用 Django 開發時,可能會覺得好像建立了一堆東西,但是它們都沒有被呼叫。沒什麼好擔心的,呼叫它們是 WSGI 應用程式的工作!
現在你已經了解 Django 的運作原理,所以我們終於要開始寫程式了。不過今天就到這裡吧,明日待續。
註 1:其實在很多狀況中,即使某個東西自稱 framework,也不一定就符合這個說法。因為太多人(?)自稱 framework,這個詞本身根本已經沒什麼意義了。但就 Django 而言,這個解釋還沒什麼太大問題。