Django 的設計哲學包括寬鬆的結合、較少的程式碼、快速發展、 DRY 原則、清晰性與一致性,這些基本上都是相互影響的,也構成 MTV 的功能劃分
↑
M T V
↓ ↓
Models Views
所謂 M 是指 Models ,也就是用資料庫 (database) 動態處理網頁資料,例如將使用者玩過一次遊戲後,把遊戲結果上傳到資料庫, T 是指 Templates ,這是說網頁採用固定的樣板,內容從資料庫動態載入,最後 V 是指 Views ,這部分是溝通 M 與 T 的 Python 程式。
下面我們直接建立新的 Django 專案 (project) ,用專案內的檔案組織來說明 Django 的設計哲學及 MTV 架構。
請先從命令列切換到準備建立專案的路徑, Django 很多操作都需要從命令列打指令。
建立 Django 專案使用指令 django-admin ,後面空一格接 startproject ,再空一格接專案名稱,此例採用 web_demo
$ django-admin startproject web_demo |
$ |
如果無聲無息跳到下一行,就表示專案建立成功,以下為專案的檔案組織,其中以 📁 標示的為資料夾
- 📁web_demo
- manage.py
- 📁web_demo
- __init__.py
- settings.py
- urls.py
- wsgi.py
換句話說, 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 ,紅字就不會再出現。底下說明開發伺服器的網址為
- http://127.0.0.1:8000/
同時按 Ctrl 加 C 就可結束伺服器程式。
打開瀏覽器,輸入以上網址,會得到下圖的結果
這是 Django 預設的首頁,我們先來討論 Django 的基本運作模式
↓
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) 。
開頭兩行先引入 admin 及 path ,因為底下設定 urlpatterns 需要用到這兩個定義
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns 是一個串列 (list) ,也就是說 Django 利用 urls.py 裡的 urlpatterns 來儲存網站可以顯示內容的網址,預設只有一個,就是用 path() 呼叫的部分,這是說除了首頁外,網址
- http://127.0.0.1:8000/admin/
會有內容,目前會自動轉址到以下的登入畫面,這是由 admin 裡 site 的 urls.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. 想一想,如果要運用標準程式庫來架站,需要用到哪些模組呢? |
相關教學影片
- 第十堂課導覽 ⇨ YouTube 頁面連結
- Django 的設計哲學與建立 Django 的開發環境 ⇨ YouTube 頁面連結
- 建立 Django 專案與內建伺服器 ⇨ YouTube 頁面連結
- Django 的基本運作模式與建立網站首頁 ⇨ YouTube 頁面連結