MVC在維基百科上的說明如下:
https://zh.wikipedia.org/wiki/MVC
幾個在Django框架網站建立好之後要修改的檔案如下:
檔案名稱 | 用途 |
settings.py | 網站的整體設定檔 |
urls.py | 用來指定對應網址需要使用哪一個函式回應 |
views.py | 編寫回應網址的地方 |
models.py | 建立資料表的地方 |
admin.py | 設定管理後台的地方 |
forms.py | 建立回應表單的地方 |
/templates/*.html | 建立網頁的地方 |
在前一篇文章中我們介紹了如何使用Python Django建立網站的基本步驟,現在,當我們已經有了一個可以使用的網站之後,接下來就是建立一個可以使用的資料庫之資料表,然後讓我們的網站有能力可以回應瀏覽者的請求存取資料表中的內容。
傳統的PHP網站要使用資料庫功能,首先要找到一個可以使用的資料庫(通常都是MySQL),之後利用phpMyAdmin所提供的介面,或是利用SQL的語法,建立一個資料庫,並在資料庫中加入資料表。有了資料表之後,才會在程式中利用SQL的指令操作資料庫。但是,Django的邏輯並不是這樣的。
在Django中的資料庫操作使用的是Object Relational Model(ORM),在操作的過程中不會接觸到資料表以及SQL語言與語法,所以,一開始也沒有建立資料庫和資料庫的操作。
打算在Django網站中使用資料庫時,首先要在models.py檔案中建立一個類別,在類別中定義所有要儲存的資料項目格式,而這個定義其實就等於是在資料庫中建立一個資料表的意思。典型的models.py長得像以下這個樣子:
class Keyword(models.Model):
word = models.CharField(max_length=20)
count = models.IntegerField(default=0)
ktype = models.IntegerField(default=0)
weight = models.FloatField(default=1.0)
def __str__(self):
return self.word
以傳統的Python類別定義方式,類別的名稱就是一個資料表,而在類別中的每一個變數定義就是此資料表的每一個欄位名稱以及欄位的格式設定,其它的部份,在Django的內部程式碼都會處理這些欄位和實際資料庫之間的所有介面,至於它內部是使用什麼樣的 SQL語法以及建了什麼樣的資料表名稱,都不是Python程式設計時關心的重點。
在類別中的每一個變數都是資料表中的欄位,每一個欄位都要以models類別裡面的一些方法定義這個欄位可以接受的資料型態,其實就是等於我們在資料庫的資料表中定義欄位型態是一樣的意思,只不過在這裡是使用Python的語法格式,透過函數的呼叫來完成設定的操作。詳細可以使用的欄位型態以及在設定型態之後可以使用的參數請參考Django的說明文件。
建立了資料表之後,透過migrate指令就會讓Django把它們納入框架中管理,之後即可在views.py中撰寫程式,使用ORM的方式,像是Post.objects.all()等指令把資料的內容取出放到變數中,再把這些變數內容傳遞過去HTML檔案執行渲染之後輸出到瀏覽器。
所以,可以說,urls.py負責網址的委派,之後views.py負責控制流程(V),models.py負責資料的存取(M),views.py和template(T)搭配負責顯示輸出,把專案分成三個不同的部份,即為Django的MVC架構,也叫做MTV架構。
幾個檔案之間的關係如下圖所示: