The Django Book(最新版) —MVC設計模式

模型(model)-視圖(view)-控制器(controller)的設計模式

英文鏈接:The Django Book

MVC 作為一個長期存在的概念, 因為它是一個最好的客戶端到服務端應用的設計模式模式,所以在互聯網時代的來臨後呈現了指數級的增長。基本上所有的好的框架都是圍繞著MVC 的概念設計。我打賭如果你不使用MVC 框架設計Web APP , 你是正在犯一個錯誤。作為一個概念, MVC 設計模式非常簡單,且易於理解。

mode(M): 模型,或者說展示你的數據。它並不是一個實體數據, 而是一個數據的介面。model允許你在不了解底層的錯綜複雜的資料庫的情況下,提交你的數據。model為你的資料庫提供一個抽象層, 以便在不同的資料庫中你可以使用同一套model。

view(V): 視圖,是你所能看到的。它是模型的表示層。在你的計算機里, 視圖是您在瀏覽器中所能看到的網路應用(Web app),或者是桌面應用的UI界面。視圖view還能提供一個收集用戶輸入的介面。

controller(C):控制器, 控制模型和視圖之間的信息流。它包含的業務邏輯決定了,哪些數據經由model提交給資料庫,哪些數據展現在視圖中。它還能從視圖中獲得用戶信息並且實現業務邏輯: 通過改變視圖或者修改模型中的數據。(感覺翻譯的有點怪怪的。。請大家多提意見。)

Django 密切的遵循著MVC模式, 然而它在具體實現中使用了自己的邏輯。因為「C」在框架內部處理, 更多的令人興奮發生在models, templates 和 views中。Django 通常被稱為MTV框架。在MTV模式中:

M 代表「Model」, 數據介面層。該層包含了與資料庫有關的一切:如何接受數據, 如何驗證數據, 哪些數據操作的行為,以及數據之間的關聯。我們將在之後仔細研究Django 的 models。

T代表「Template」, 表示層。該層包含了有關頁面展示的決定: 在網頁或者其他類型的文檔上該如何顯示。之後會探索Django 的templates。

V代表「View」, 業務邏輯層。該層包含了model的入口,渲染到合適的template。下一章將會講解Django的view。

MVC模式:

MVC模式的目的是實現一種動態的程序設計,使後續對程序的修改和擴展簡化,並且使程序某一部分的重複利用成為可能。除此之外,此模式通過對複雜度的簡化,使程序結構更加直觀。軟體系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:

  • 控制器(Controller)- 負責轉發請求,對請求進行處理。
  • 視圖(View) - 界面設計人員進行圖形界面設計。
  • 模型(Model) - 程序員編寫程序應有的功能(實現演算法等等)、資料庫專家進行數據管理和資料庫設計(可以實現具體的功能)。

MTV應用模型:

將應用程序劃分為三種組件,模型 - 視圖 - 控制器(MVC)設計定義它們之間的相互作用。[2]

  • 模型(Model) 用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。「 Model 」有對數據直接訪問的權力,例如對資料庫的訪問。「Model」不依賴「View」和「Controller」,也就是說, Model 不關心它會被如何顯示或是如何被操作。但是 Model 中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用於監視此 Model 的 View 必須事先在此 Model 上註冊,從而,View 可以了解在數據 Model 上發生的改變。(比較:觀察者模式(軟體設計模式))
  • 視圖(View)能夠實現數據有目的的顯示(理論上,這不是必需的)。在 View 中一般沒有程序上的邏輯。為了實現 View 上的刷新功能,View 需要訪問它監視的數據模型(Model),因此應該事先在被它監視的數據那裡註冊。
  • 控制器(Controller)起到不同層面間的組織作用,用於控制應用程序的流程。它處理事件並作出響應。「事件」包括用戶的行為和數據 Model 上的改變。

MTV(個人理解,如有錯誤,請大家指正!):

說得通俗易懂呢,就是models寫Django自帶的SQL語言, template中寫前端代碼(HTML或者CSS),view寫業務邏輯,比如取得template中用戶提交的數據,取出models中存儲在資料庫中的內容, 取出的內容如何渲染給合適的template。後續會仔細講解其餘章的內容。

Django和python的安裝不予概述,畢竟百度、知乎都一大堆答案。具體操作Django官網也都有。Django官網

本人會記錄一些個人認為有價值的Django筆記, 和學習過程中遇到的難點,疑點。

推薦閱讀:

一句一句讀Pytorch(更新中)
使用Python實現一個文本自動摘要工具

TAG:Python | Web开发 | Django框架 |