Django筆記 = 1 = 基本架構

【 Django 的基本架構】
下圖是一個 Django 專案簡單的架構圖,接下來會簡單介紹這個架構運作的流程和其中檔案的功用。



【 settings.py 】
專案資料夾裡的 settings.py 主要用以設定這個專案的全域設定和全域變數,如使用的資料庫、使用者、時區、編碼、使用的應用程式等等。










【 urls.py 】
與 settings.py 位於專案資料夾同一層裡的 urls.py 主要用以設定網址的指向,即設定使用者輸入什麼網址時我要執行什麼應用程式。

若網站架構較為龐大,可以在不同的應用程式裡再行建立個別的 urls.py ,讓這一層的 urls.py 可以僅指向到不同應用程式裡的 urls.py ,再從個別的 urls.py 做詳細的指向工作。






【 apps 資料夾】
apps 資料夾是作為我們存放應用程式的資料夾,而 ---- 所含括的幾個檔案是我們在利用 Django 指令產生應用程式資料夾(產生的方法會於下偏詳述)時自動產生的,基本上並無特殊作用,若是採用直接手動新增 apps 這個資料夾則這些檔案就不會存在,對整個專案的運行也不會造成直接影響
註:手動直接建立 apps 會造成錯誤,還是請大家乖乖使用指令建立吧!

但包括 apps 這個資料夾的命名(對,其實不取做 apps 而要另命他名也是可以),以及建立 apps 資料夾的方式,都是使用習慣的一種,而當我們在進行團隊作業時,習慣能夠統一當然是最有利於開發的。



【 應用程式資料夾 】
應用程式資料夾如架構圖中的"應用程式 A"、"應用程式 B",即是網站中的功能系統,例如一個完整的留言或是討論區,即可歸類為一個"應用程式"。

一個應用程式可能不只有單一個、而是包含很多樣的功能,例如一個討論區應用程式,其中可能就包含了登入、留言、查詢、檔案上傳等等的功能,而形成的一個"子系統"。





【 models.py 】
應用程式資料夾中的 models.py 是我們設定應用程式所用到的資料庫( database )以及其中資料庫欄位( table )的檔案。

在 Django 系統中我們僅需在 models.py 設定(設計)應用程式所需的資料庫格式,而不需要再另外使用其他程式對資料庫進行設定;另外它也讓我們可以直接在程式中呼叫資料庫中的資料,因此你可以視其為一個 Django 與資料庫系統的連絡橋梁。





【 views.py 】
應用程式資料夾中的 views.py 就是應用程式的主體,所有在程式中要執行的動作或計算全都是寫在 views.py 之中,即整個應用程式的核心所在。

一般在 urls.py 中所設定的指向,就是指向到 views.py 中。







【 templates 資料夾 】
templates 資料夾就是我們存放網頁樣板的地方,即各式 *.html 等的存放地。

若是很單純的網站架構,可以直接把 *.html 檔案放置在 templates 資料夾底下,此時 Django 在呼叫樣板時是以 templates/target.html 呼叫我們要的網頁樣板(例如當我們要呼叫 index.html 時,呼叫路徑就是 templates/index.html ),但很多時候網站架構可能會包含很多子系統,若此時仍是以這種架構存放樣板,就有可能產生問題。

假設我們擁有 A 和 B 兩個子系統,而這兩個子系統中有名稱相同的樣板檔案(如兩個系統都擁有 index.html 這個樣板 ),雖然這兩個子系統中都有自己的 templates 資料夾,在存放時並不會有問題,但是在呼叫樣板時就會形成兩個子系統呼叫的路徑都是 templates/target.html (以前例來說就是 templates/index.html ),且有兩個樣板檔案( A 子系統中的 index.html 和 B 子系統中的 index.html )都符合這個呼叫路徑,因此有可能會產生呼叫錯誤的情形( A 子系統呼叫到 B 子系統中的 index.html )。

因此我們習慣會在 templates 資料夾底下再建立一層命名為子系統名稱的資料夾( 例如在 A 子系統底下即為 templates/A),並將樣板檔案存放在其中,此時 Django 在呼叫樣板時就會是以 templates/子系統名稱/target.html ( 依前例來說即為 templates/A/index.html)呼叫我們要的網頁樣板,如此的呼叫路徑基本在同一個專案中是不會重複的,因此可以確保 Django 呼叫的樣板就是我們要的那一個樣板。

【 media 資料夾 】
media 資料夾是我們存放影像或是其他多媒體檔案的地方,可以視情形存放在不同階層的 media 資料夾。

如一些整個網站都會用到的樣版圖片或是 logo ,就可以存放在專案資料夾底下的 media 資料夾( Django 專案/media)當中,若是子系統個別會用到的圖片或是多媒體檔案,則可放置在應用程式下的 media 資料夾( 應用程式 B/media)底下。





【 執行流程 】

上圖是一個 Django 架構的網站執行的一般流程:
  1. 使用者輸入網址進入網站(例如 http://DjangoProgram.com.tw/ 即指向到我們的 Django 專案)。
  2. 進入 urls.py 察看使用者輸入的網址應該要指向到哪一個應用程式做什麼動作。
  3. 根據網址在 urls.py 中所對應的結果指向至應用程式(例如 /AppB/ 指向到應用程式 B)。
  4. 指向到 views.py 裡的目標(例如 /DoWhat 即表示在 views.py 中的某個功能)後即開始做運算。
  5. 若有需要時 views.py 就會透過 models.py 向資料庫撈取資料,運算完成後,把運算結果、 media 資料夾中的多媒體檔案(若有需要的話)和從 templates 資料夾中的樣板檔案做結合。
    註:關於 media 檔案的提取流程,我寫的部分有些錯誤,這邊我直接借用阿蒙學長的留言,希望他不會介意~XD

    這個 media 中的檔案其實和 views.py 生產出的結果: html 原始碼,並不是一起作出來的。你可以在 ./manage.py runserver 的 console 視窗中發現,瀏覽紀錄一定是先出現 /SomeApp/DoWhat/ 的紀錄,然後才出現 /media/SomeApp/images/some.jpg 的紀錄。

    這流程應是使用者在網址中輸入 http://Djangoproject.com.tw/SomeApp/DoWhat/ 後,觸發了 views.py 產生出一個 html 網頁,待瀏覽器收到了這個網頁原始碼後,它會去解析有那些檔案,像是 .css, .js, .jpg ... 被這個網頁所引用,然後瀏覽器會才再針對一個檔案一個檔案依序向網站下載。基本上,網頁內容是一個依序且多次連線的結果。
  6. 將上一步的結果送回給使用者,即呈現一個完整的網頁。
 

© Copyright Tech Minute . All Rights Reserved.

Designed by TemplateWorld and sponsored by SmashingMagazine

Blogger Template created by Deluxe Templates