1. 程式人生 > 實用技巧 >從0到1搭建個人部落格-Django(三)

從0到1搭建個人部落格-Django(三)

你好,我是goldsunC

讓我們一起進步吧!

從0到1搭建個人部落格-Django(三)

在以下連結快速回顧系列文章內容

從0到1搭建個人部落格-Django(一)
從0到1搭建個人部落格-Django(二)

本篇內容主要是一些框架概念性的東西,需要理解,建議如果沒基礎的話多讀幾遍。

MVC設計模式

說到MVC,它可是Web設計模式的經典制作,我們前文說過Django是遵循MVC模式的,而實際上,Django實際使用的是MTV框架,MTV是從MVC上衍生而來的。不管MVC還是MTV,它們究竟是什麼呢?下文將給出介紹。

MVC是三個單詞的縮寫,分別為:模型(Model)檢視(View)控制器(Controller)

。MVC模式的主要目的就是實現Web系統的職能分工。

其中:

  • Model層負責實現系統中的業務邏輯。

  • View層負責與使用者的介面互動。

  • Controller層是Model與View之間溝通的橋樑,它可以分派使用者的請求並選擇恰當的檢視(View)顯示。同時它也可以解釋使用者的輸入並將它們對映為模型層可執行的操作。

MVC模式的組成結構如圖所示:

MVC設計模式強制性的使得應用程式的輸入處理輸出分開。使得MVC應用程式被分成三個核心部件:模型、檢視、控制器。它們各自處理自己的任務。

模型:模型表示企業資料和業務規則。在MVC的三個核心部件中,模型一般擁有最多的處理任務。例如它可能用像EJBs

ColdFusion Componments這樣的構件物件來處理資料庫。被模型返回的資料是中立的,也就是說模型與資料格式無關,這樣使得一個模型能夠為多個檢視提供資料。由於應用於模型的程式碼只需寫一次就可以被多個檢視重用,所以減少了程式碼的重複性。

檢視:檢視是使用者看到並與之互動的介面。簡單來說你用HTML寫成的頁面就是屬於檢視負責的範圍。當然檢視還包括Macromedia FlashXHTMLXML/XSLWML等一些標識語言和Web Services

控制器:控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求。所以當單擊Web頁面中的超連結和傳送HTML表單時,控制器本身並不輸出任何東西和做任何處理。它只是接收請求並決定呼叫哪個模型構件去處理請求,然後再確定用哪個檢視來顯示返回的資料。

實際應用中一個MVC設計模式簡單的請求與響應過程如下:

首先客戶端向伺服器傳送request請求Controller層接受請求,然後向ViewModel層傳送指令。

View層接收到Controller傳送過來的指令後,選擇並載入使用者請求的頁面,並將此頁面傳送給Controller層。

Model層接收到指令後與資料庫進行互動並選擇相應的業務資料,然後將資料傳送給Controller層。

之後Controller層將ModelView層返回的資料陣列織成響應格式傳送給瀏覽器,瀏覽器解析後將頁面展示出來。

MVC的3層之間緊密相連,但是卻相互獨立,每一層的修改都不會影響其它層,每一層都提供了各自獨立的介面供其它層呼叫,這樣的設計模式降低了程式碼之間的耦合性,增加了模組的可重用性

MVC設計模式的優點

  1. 低耦合性

檢視層和業務層分離,這樣就允許只更改檢視層程式碼而不用重新編譯模型和控制器程式碼,同樣如果一個應用的業務流程或者業務規則發生改變則只需要改動模型層。

  1. 高可重用性和可適用性

如今,我們可以通過很多方式來訪問應用程式。如你可以使用電腦、手機或者Pad訪問同一個伺服器,雖然展示的頁面不大一樣,但是如果你做某項操作之後再伺服器端產生的效果是一樣的。MVC模式允許使用各種不同樣式的檢視來訪問同一個伺服器端的程式碼。這是因為模型返回的資料沒有進行格式化,所以同樣的構件能被不同的介面使用。而實現這些不同的介面只需要改變檢視層的實現方式,控制器層和模型層無需做任何改變。

  1. 較低的生命週期成本

MVC使得開發和維護使用者介面得技術含量降低。

  1. 快速部署

使用MVC模式可使開發時間得到相當大的縮減,它使程式設計師集中精力於業務邏輯,UI程式設計師集中精力於表現形式上。

  1. 可維護性

檢視層和業務邏輯層分離使得Web應用程式更易於維護和修改。

  1. 利於工程化管理

因為不同層只負責各自具體的功能,每一個層不同的應用具有某些相同的特徵,有利於通過工程和、工具化管理程式程式碼。

MVC設計模式的缺點

  1. 增加了系統結構的複雜性

如果你只想要開發一個簡單的介面,完全遵循MVC模式使模型、檢視和控制器分離,會增加結構的複雜性。

  1. 檢視與控制器間過於緊密的連線

檢視與控制器是相互分離又緊密聯絡的部件,檢視沒有控制器的存在,其應用很有限,控制器缺少檢視,應用也很有限,這就妨礙了它們的獨立重用。

  1. 檢視對模型資料的低效率訪問

依據模型操作介面的不同,檢視可能需要多次呼叫才能獲得足夠的顯示資料。對未變化資料的不必要訪問將損失操作效能。

Django中的MTV

介紹完了MVC的一些概念,現在講一講Django的MTV。

在Django中,控制器接受使用者輸入的部分由框架自行處理。Django更關注的是模型(Model)模板(Template)檢視(View),因此Django也被稱為MTV框架。

簡單的理解就是:Django將MVC中的View(檢視)進一步分解成為了Django 檢視(View)Django 模板(Template)

在Django中:

模型(Model):代表資料存取層,它負責處理與資料相關的所有事務如:如何存取資料、如何驗證資料有效性、資料之間的關係等。

模板(Template):代表表現層,它負責處理與表現相關的決定例如:如何在頁面或其他型別文件中進行顯示。

檢視(View):代表業務邏輯層,這一層包含存取模型及調取恰當模板的相關邏輯。可以把它看作模型與模板之間的橋樑。

DjangoMTV結構如圖所示:

按照MVC模式進行分析,即在Django中用View層取代了Controller層的位置,用模板(Template)層取代了原來View層的位置。

在Django中你可能會把模板的檢視混淆,但實際上Tempalte就是模板的意思,你可以理解為如一個HTML頁面等。

資料庫

資料庫大家肯定都不陌生,它就是一個儲存資料的地方。一個數據庫往往由多個數據表構成。既然我們是做網站,那產生資料是必定的,因此我們需要給網站產生的資料找一個儲存的地方。

還記得專案資料夾my_blog下我們測試伺服器後產生的那個db.sqlite3檔案嗎?預設情況下,那個檔案就算是我們的資料庫了,網站產生的資料會存放在那裡。

SQLite3資料庫是在Python2.5+版本內建的,因此這個資料庫不需要安裝,能夠直接使用。Django是預設支援SQLite3資料庫的。當然,你也可以使用其它資料庫如MySQL,但那個需要安裝配置等,為了方便,我們現在使用SQLite3資料庫,等專案完成你學會了Django的時候,換哪個資料庫都是可以的。

資料模型

剛才介紹了我們的資料都存放在SQLite3資料庫中,大家都知道操作資料庫使用的是SQL語句,可能很多人會使用SQL,但也可能有些人不會。不過在Django中,你可以不用去直接操作資料庫,只要定義好資料模型,然後用Python語句操作就可以了。也就是說你定義好了模型之後,其它的東西都會自動生成。這是為什麼呢?這裡就要介紹一下物件關係對映(Object Relational Mapping, ORM)了。

物件關係對映(ORM)

物件關係對映是通過使用描述物件和資料庫之間對映的元資料,將程式中的物件自動持久化到關係資料庫中。Django的ORM位於框架的中心,介於資料模型(這個模型是繼承自diango.db.models.Model類的子類)和基礎關係資料庫物件之間。

簡單來講就是ORM把底層關係資料庫和Python的面向物件特質聯絡起來了。**每一個模型類對映對應的資料表,對模型的操作將直接反映到底層的資料表,即每一個類代表了一個表,每建立一個類的例項就相當於在表中增加了一行資料,每一個例項的屬性代表了每一行資料的一列。**因此在定義好資料模型之後,通過對映到基礎資料庫中的Python物件,來建立、檢索、更新以及刪除資料庫資料。這樣我們修改資料就不用通過SQL語句了,直接用Python去修改物件的屬性即可。

參考文獻:

    1. https://www.dusaiphoto.com/article/2/
    2. https://docs.djangoproject.com/en/3.1/intro/
    3. http://c.biancheng.net/view/7288.html
    4. 本文首發於python黑洞網,部落格園同步更新