[Django 30Days] Day4 MTV與基本設定
day4 本篇將在介紹MVC架構與MTV架構,並完成基本設定。
一般MVC的架構
MVC(Model, View, Controller)框架,主要在於實現一個動態程式設計框架,讓後續的程式重複使用率更高,並且在擴充與維護上更有效率,而其作法分割為下列三種邏輯。
Model模型:處理商業邏輯,對資料庫進行資料存取及資料庫管理設定。View視圖:與使用者之間的介面,傳遞使用者行為以及資料呈現。
Controller:處理相關請求並且回應。
將此系統分割後,減少系統的複雜度並且擁有此三種區塊之間的明確分工,在一個專案中,可以更簡單地進行團隊合作。
Django MTV架構
Django的架構是類似MVC架構的MTV架構, Django主架構是Model、Template和View三種邏輯。
Models(模型):以Python之類別為基礎對資料庫進行資料存取及資料庫管理設定,定義完整,便可從網站框架下使用ORM操作資料內容,而不用完整了解SQL指令。
Template(模板):與使用者之間的介面,在頁面上處理View傳送的資料並顯示。
Views(視圖):包括邏輯運算處理、模型資料抓取並對應相對應的模板,算是模型與模板之間的橋樑。
使用者在網頁輸入網址後,網頁伺服器會接收到請求,並將任務指派給urls.py並解析使用者端發送的網址,根據網址找尋views.py內相對應的程式做運算,而當views.py中的運算內容需要使用資料庫的資料時,會使用ORM的語法來與資料庫進行互動抓取資料,得到資料後返回views.py做運算,運算後的結果透過Templates處理後將最終的介面顯示在瀏覽器上供使用者觀看。
Django MTV架構中所要開發的大型專案網站,在系統分離與設計、標準的需求分析與不同的開發步驟中一步都不能少,對於日後修改專案錯誤的成本及維護性。而MTV架構中利於美工人員與網頁工程師合作,在版型、程式的分離還有Django(controller)跟資料庫之間的分離,網站app與app的關係,可以讓開發人員更容易分工。分成三類的原因是為了避免Spaghetti Code,從前的網頁寫法會將這三種功能都寫在同一支程式中,造成混亂與維護上的困難,因此逐步演進將三種功能切割開來獨立運作,並且有專門人員獨立維護,並將前後端可以分離,讓專案可以有較好的彈性且更好維護,最後降低複雜度。
完成Django基本設定
上一篇已經創建了一個project及一個app,以下是目前的目錄。
Step1:
要在專案底下與app同層新增兩個資料夾templates與static。
templates資料夾: 存放html檔,與使用者互動的前端介面,接受從views傳送的資料並顯示。
static資料夾:存放CSS、JS、圖片、文件檔案等。便於管理與呼叫。
Step2:
到kimetsu/settings.py下新增app、設定templates路徑、設定資料庫、設定static的路徑。
找到INSTALLED_APPS並新增app到列表裡面:
在DIRS中寫入os.path.join(BASE_DIR, ‘templates’):
BASE_DIR的意思是專案底下的絕對路徑,公用的templates的路徑需要指定,而app底下的templates可以不需要指定。
os.path.join則是將多個路徑合併後返回。
設定資料庫(此專案使用postgreSQL)。
連接postgreSQL套件安裝
pip install psycopg2DB Example:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.your_db_package',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'db_password',
'HOST': 'ip',
'POST': 'port',}
}
在此講解app底下的migrations資料夾。
migrations資料夾: 資料庫操作紀錄,當app中相對應的資料表結構產生變化時,利用指令python manage.py migrate同步models.py與資料庫之間的變動,並用python manage.py makemigrations紀錄此變動。
用指令
python manage.py mirgare
將django預設的資料表新增到資料庫中,若沒有錯誤則代表資料庫連接沒有問題。
migrate會根據installed_apps中的設定找尋相對應的models,並與資料庫對應轉換。
回到資料庫重新整理後查看Tables,資料表遷移成功。
設定static路徑
STATICFILES_DIRS:
開發環境,靜態檔案存放的位置,可以寫入多個路徑。
STATIC_ROOT:
正式環境,用collectstatic指令,將STATICFILES_DIRS設定目錄下檔案,集中儲存到STATIC_ROOT指定目錄。
時區設定
LANGUAGE_CODE = 'zh-Hant'
TIME_ZONE = 'Asia/Taipei'
目前要使用的設定終於都完成了,接下來要開始思考與開發囉!
參考資料:
- 何敏煌、林亮昀:python新手使用django架站技術實作-活用Django2.0 Web Framework建構動態網站的16堂課
2. 林萍珍:Python網頁程式交易APP實作。
3. Django官方網站