1. 程式人生 > 實用技巧 >Django框架介紹

Django框架介紹

Django框架介紹

一、流程介紹

mvc.png

MVC是眾所周知的模式,全名為 Model-View-Controller。

即:將應用程式分解成三個組成部分:model(模型),view(檢視),和 controller(控制 器)

  • M 全拼為 Model,主要封裝對資料庫層的訪問,對資料庫中的資料進行增、刪、改、查操作。
  • V 全拼為 View,用於封裝結果,生成頁面展示的 HTML 內容。
  • C 全拼為 Controller,用於接收請求,處理業務邏輯,與 Model 和 View 互動,返回結果

Django也是一個MVC框架。但是在Django中,控制器接受使用者輸入的部分由框架自行處理,所以 Django 裡更關注的是模型(Model)、模板(Template)和檢視(Views),稱為 MTV模式(Model-View-Template):

  • M 全拼為 Model,與 MVC 中的 M 功能相同,負責和資料庫互動,進行資料處理;
  • V 全拼為 View,與 MVC 中的 C 功能相同,接收請求,進行業務處理,返回應答;
  • T全拼為Template,與 MVC中的V功能相同,負責封裝構造要返回的HTML。

MVT 和 MVC 差異就在於黑線黑箭頭標識出來的部分 :

mvt.png

ORM:Object Relational Mapping,物件關係模型。通過使用描述物件和資料庫之間對映的元資料,將面嚮物件語言程式中的物件自動持久化到關係資料庫中。本質上就是將資料從一種形式轉換到另外一種形式。ORM 就負責 Model層的業務。

二、 MVT 各部分功能

(1)Django 中的 ORM

ORM 全稱是 Object Relational Mapping(物件關係對映),它把物件與資料庫中的表關聯起來,物件的屬性對映到表的各個欄位,同時,它把對錶的操作對應到對物件的操作,實現了物件到 SQL,SQL 到物件的過程轉換。

(2)使用者模組與許可權系統

提供了使用者、使用者組、許可權等概念;維護了使用者、使用者組和許可權之間的關聯關係;包含了使用者鑑權與登入等基本功能。

(3)Admin 後臺管理系統

對系統中定義的資料表(Model)提供了原生的後臺管理支援,且支援對管理頁面的個性化定製,例如,針對欄位值的過濾功能、搜尋功能、排序功能,資料表字段的展示順序規則定義功能,欄位歸類功能等。

(4)檢視

Django 檢視是 MTV 設計模式中的 V,它在 Django 中的體現是一個 Python函式或者是類,接收 Web 請求並返回 Web 響應。

(5)模板系統

模板系統用於將頁面設計的 HTML 程式碼和用於邏輯處理的 Python程式碼分離開來,即做到了資料與邏輯的分離,去除不同程式碼之間的耦合。

(6)優雅的表單系統 Form

表單系統可以根據 Form物件的定義:自動生成 HTML 表單元素、檢查表單資料的合法性、對不合法的表單資料進行回顯,並提示錯誤、將表單資料轉換為對應的 Python 資料型別。

(7)訊號機制

Django 對訊號機制的解釋是:在框架的不同位置傳遞特定的訊息給應用程式執行預定的操作。它是一種觀察者模式,或者叫做釋出-訂閱模式。即當系統中有 event(事件)發生,一組 senders(傳送者)將 signals(訊號)傳送給一組receivers(接收者),receivers 再去執行預定的操作。

(8)路由系統

從 MTV 的設計模式中可以看到,使用者向 Web 站點發送請求(對應到一個url),首先會到達“對應的”檢視,那麼,這裡的檢視是怎麼對應上的呢?這就是Django 路由系統的作用。Django 利用 URLconf 構建起 URL 模式與檢視函式之間的對映關係,即利用 Django 的特定配置方式,設定好哪個 url 可以去執行哪一段 Python 程式碼。

(9)中介軟體

中介軟體是一個外掛系統,嵌入在 Django 的 Request 和 Response 之間執行,可以對輸入和輸出內容作出修改。中介軟體是業務無關的技術類元件,是用來定義處理所有請求和響應的通用處理架構。

(10)快取系統

有時訪問 Web 站點的某一個服務會發現執行的比較慢,這種情況發生的原因可能是背後有複雜的計算邏輯,也可能是訪問資料庫系統或者檔案系統造成的IO 延遲等等。通常提高 Web 站點執行效率的方法是使用快取,將經常被使用者訪問到的頁面結果儲存下來,再次訪問時只需要返回快取的結果,不會再次執行計算等類似耗時的操作。

Django 提供一個健壯的快取系統,實現了不同級別的快取粒度:可以快取單個檢視的結果輸出,快取難以生成的片段,或者是快取整個網站。