你好,我是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 Flash、XHTML、XML/XSL、WML等一些標識語言和Web Services,
控制器:控制器接受用戶的輸入并呼叫模型和視圖去完成用戶的需求,所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身并不輸出任何東西和做任何處理,它只是接收請求并決定呼叫哪個模型構件去處理請求,然后再確定用哪個視圖來顯示回傳的資料,
實際應用中一個MVC設計模式簡單的請求與回應程序如下:

首先客戶端向服務器發送request請求,Controller層接受請求,然后向View和Model層發送指令,
View層接收到Controller發送過來的指令后,選擇并加載用戶請求的頁面,并將此頁面發送給Controller層,
Model層接收到指令后與資料庫進行互動并選擇相應的業務資料,然后將資料發送給Controller層,
之后Controller層將Model和View層回傳的資料陣列織成回應格式發送給瀏覽器,瀏覽器決議后將頁面展示出來,
MVC的3層之間緊密相連,但是卻相互獨立,每一層的修改都不會影響其它層,每一層都提供了各自獨立的介面供其它層呼叫,這樣的設計模式降低了代碼之間的耦合性,增加了模塊的可重用性,
MVC設計模式的優點
- 低耦合性
視圖層和業務層分離,這樣就允許只更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣如果一個應用的業務流程或者業務規則發生改變則只需要改動模型層,
- 高可重用性和可適用性
如今,我們可以通過很多方式來訪問應用程式,如你可以使用電腦、手機或者Pad訪問同一個服務器,雖然展示的頁面不大一樣,但是如果你做某項操作之后再服務器端產生的效果是一樣的,MVC模式允許使用各種不同樣式的視圖來訪問同一個服務器端的代碼,這是因為模型回傳的資料沒有進行格式化,所以同樣的構件能被不同的界面使用,而實作這些不同的界面只需要改變視圖層的實作方式,控制器層和模型層無需做任何改變,
- 較低的生命周期成本
MVC使得開發和維護用戶介面得技術含量降低,
- 快速部署
使用MVC模式可使開發時間得到相當大的縮減,它使程式員集中精力于業務邏輯,UI程式員集中精力于表現形式上,
- 可維護性
視圖層和業務邏輯層分離使得Web應用程式更易于維護和修改,
- 利于工程化管理
因為不同層只負責各自具體的功能,每一個層不同的應用具有某些相同的特征,有利于通過工程和、工具化管理程式代碼,
MVC設計模式的缺點
- 增加了系統結構的復雜性
如果你只想要開發一個簡單的界面,完全遵循MVC模式使模型、視圖和控制器分離,會增加結構的復雜性,
- 視圖與控制器間過于緊密的連接
視圖與控制器是相互分離又緊密聯系的部件,視圖沒有控制器的存在,其應用很有限,控制器缺少視圖,應用也很有限,這就妨礙了它們的獨立重用,
- 視圖對模型資料的低效率訪問
依據模型操作介面的不同,視圖可能需要多次呼叫才能獲得足夠的顯示資料,對未變化資料的不必要訪問將損失操作性能,
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去修改物件的屬性即可,
參考文獻:
- https://www.dusaiphoto.com/article/2/
- https://docs.djangoproject.com/en/3.1/intro/
- http://c.biancheng.net/view/7288.html
-
本文首發于python黑洞網,博客園同步更新
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183852.html
標籤:Python
上一篇:python——初識函式
下一篇:python——初識函式
