Python 入門指南

單元 29 - Django 的設計哲學與 MTV 的功能劃分

本書已有新版,請參考 Python 入門指南 5.00 - 目錄

~~學習進度表~~

Django 的設計哲學包括寬鬆的結合、較少的程式碼、快速發展、 DRY 原則、清晰性與一致性,這些基本上都是相互影響的,也構成 MTV 的功能劃分

Templates

M   T   V
↓      ↓
Models           Views

所謂 M 是指 Models ,也就是用資料庫 (database) 動態處理網頁資料,例如將使用者玩過一次遊戲後,把遊戲結果上傳到資料庫, T 是指 Templates ,這是說網頁採用固定的樣板,內容從資料庫動態載入,最後 V 是指 Views ,這部分是溝通 MT 的 Python 程式。

下面我們直接建立新的 Django 專案 (project) ,用專案內的檔案組織來說明 Django 的設計哲學及 MTV 架構。

請先從命令列切換到準備建立專案的路徑, Django 很多操作都需要從命令列打指令。

建立 Django 專案使用指令 django-admin ,後面空一格接 startproject ,再空一格接專案名稱,此例採用 web_demo

$ django-admin startproject web_demo
$

如果無聲無息跳到下一行,就表示專案建立成功,以下為專案的檔案組織,其中以 📁 標示的為資料夾

換句話說, django-admin startproject 會自動產生專案檔案,然後放在 web_demo 資料夾中,其中 manage.py 為管理程式,稍後會用 manage.py 建立網頁應用程式及資料庫。

web_demo 中還會有一個第二層的 web_demo 資料夾,裡頭包含四個檔案,其中 __init__.py 為套件必須,而 settings.py 跟專案的整體設定有關,稍後再說明需要調整哪些相關設定, urls.py 用來管理網址, Django 是用網址來連結到特定的網路應用程式,最後 wsgi.py 為預設的 WSGI 部署程式,這裡不會去修改這個程式。

現在,先來啟動 Django 內建的開發伺服器,來看看專案預設的網站是怎麼樣的囉!請切換到第一層的 web_demo 路徑,然後用以下指令啟動伺服器

$ python manage.py runserver
Performing system checks...
 
System check identified no issues (0 silenced).
 
You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
 
June 04, 2018 - 08:24:40
Django version 2.0.4, using settings 'web_demo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

紅字為警告訊息,這裡可以先忽略,因為之後建立資料庫後會下指令 python manage.py migrate ,紅字就不會再出現。底下說明開發伺服器的網址為

同時按 CtrlC 就可結束伺服器程式。

打開瀏覽器,輸入以上網址,會得到下圖的結果

這是 Django 預設的首頁,我們先來討論 Django 的基本運作模式

網址 → urls.py → views.py
                 ↓
                 models.py

也就是說, Django 收到網址後,就交給 urls.py 處理,由 urls.py 來決定交給 view.py 中的哪一個函數 (function)類別 (class) 做後續顯示網頁的工作,如果需要資料庫,就會依 models.py 中設定好的資料模型從資料庫取得資料或存入資料。

倒是專案預設沒有 view.py ,這沒關係,我們會在下一個單元自行加入,這裡先來看看 urls.py 的預設內容

from django.contrib import admin
from django.urls import path

urlpatterns = [
  path('admin/', admin.site.urls),
]

以上 urls.py 不包含預設的模組文件字串 (docstring)

開頭兩行先引入 adminpath ,因為底下設定 urlpatterns 需要用到這兩個定義

urlpatterns = [
  path('admin/', admin.site.urls),
]

urlpatterns 是一個串列 (list) ,也就是說 Django 利用 urls.py 裡的 urlpatterns 來儲存網站可以顯示內容的網址,預設只有一個,就是用 path() 呼叫的部分,這是說除了首頁外,網址

會有內容,目前會自動轉址到以下的登入畫面,這是由 adminsiteurls.py 來處理的

'admin/' 為 Django 提供處理資料庫的網頁後台介面,我們在單元 33 才會詳細介紹。

最後回頭來看 Django 的設計哲學,由於各部份採取「寬鬆的結合」,像是網址交給 urls.py ,顯示內容交給 view.py ,資料庫模型交給 models.py ,由於各部分是獨立分開的,也就能用「較少的程式碼」進行「快速發展」。

所謂「DRY 原則」是 Don’t repeat yourself 的頭字母縮寫,基於前三項哲學,也就再用 Django 不需要一直重複相同的程式碼,整體的程式碼也能保持「清晰性」與「一致性」。

這個單元我們只新建好 web_demo 專案,然後查看 urls.py 的預設程式碼內容,下個單元我們要製作網站首頁,並且要設定 settings.py ,調整 urls.py ,並且增加 view.py

中英文術語對照
類別class
資料庫database
函數function
串列list
專案project
重點整理
1. Django 的設計哲學包括寬鬆的結合、較少的程式碼、快速發展、 DRY 原則、清晰性與一致性。
2. Django 採用 MTV 模式架站, M 是指 Models , T 是指 Templates , V 是指 Views 。
3. Django 網站的基本運作模式為由網址向伺服器提出要求,此時伺服器會去查找 urls.py 中連結到的 views.py ,由 views.py 中的程式搭配 models.py 取得資料庫中儲存的資料顯示網頁內容。
4. 'admin/' 為 Django 提供處理資料庫的網頁後台介面。
問題與討論
1. 什麼是 MTV 模式?這跟 MVC 有什麼不同?
2. Django 有哪些設計哲學?這些設計哲學是否跟 Python 的設計哲學相呼應?
3. Django 網站的基本運作模式為何?
練習
1. DjangoSites.org 搜集了眾多利用 Django 架設的網站,從中找幾個網站連結過去瀏覽,感受一下 Django 網站運作的模式。
2. 想一想,如果要運用標準程式庫來架站,需要用到哪些模組呢?

相關教學影片

上一頁 Django 篇
回 Python 入門指南首頁
下一頁 單元 30 - 網站首頁與 settings.pyurls.pyview.py
回 Python 教材首頁
回程式語言教材首頁