楊洪濤



關鍵詞:軟件框架;MVC;MTV;ORM模型
1 引言
Django是用Python語言設計的一款免費的Web開發框架,它幾乎包括了Web應用的各領域,能方便快速地搭建高性能的數據庫驅動網站。Django采用了通用Web開發模式的高度抽象,為復雜的編程作業提供了快速解決方案,它也是一款全能型框架,內置了許多模塊,極大地方便了Web開發者。
百度百科解釋,“軟件框架(software framework) ,通常指的是為了實現某個業界標準或完成特定基本任務的軟件組件規范,也指為了實現某個軟件組件規范時,提供規范所要求之基礎功能的軟件產品。”簡而言之,框架就是制定一套規范或者規則,程序員在該規范或者規則下工作,好比使用別人搭好的舞臺來做編劇和表演。Django就是Web開發方面優秀的框架,下面筆者就Django 的MVC 架構設計與實現介紹一下。
2 MVC 設計模式
MVC是Web開發領域著名的設計模式,MVC是Model-View-Controller的縮寫,其各部分含義如下:
1) Model:表示數據存取層,處理與數據相關的所有事務,包括對數據表的定義和數據的增刪改查等。
2) View:表示視圖層,是系統前端顯示部分,負責顯示什么和如何顯示,用于向用戶展示結果。
3) Controller:表示控制層,主要根據從View層輸入的指令來檢索Model層的數據,并在該層編寫代碼產生結果并輸出,用于處理請求、獲取數據和返回結果[1]。
MVC設計模式的請求與響應過程如圖1所示,運行過程如下:
1) 用戶通過瀏覽器向服務器發起Request請求,Controller層接受請求后,同時向Model層和View 發送指令;
2) Model層根據指令與數據庫交互并選擇相應業務數據,然后將數據發送給Controller層;
3) View層接收到Controller的指令后,加載用戶請求的頁面,并將此頁面發送給Controller層;
4) Controller層接收到Model和View層的數據后,將它們組織成Response響應格式發送給瀏覽器,瀏覽器通過解析把頁面展示出來。
MVC的三層之間緊密相連,但又相互獨立,每層的修改都不會影響其他層,每層都提供了各自獨立的接口供其他層調用,MVC 的設計模式降低了代碼之間的耦合性,增加了模塊的可重用性,這正是MVC設計模式的優點所在。
3 MVC 的優化設計模式——MTV
Django是基于MVC構造的框架,但在MVC基礎上,對控制器Controller進行了封裝,增加了模塊功能Template 實現前端網頁,所以Django 更關注的是模型、模板和視圖,稱為MTV設計模式。其各部分職責如下:
1) Model:即數據存取層,與MVC中的M功能相同,負責和數據庫交互,處理所有數據相關的業務,并提供數據的增刪改查。
2) Template:即模板層,也叫表現層,與MVC中的V功能相同,負責封裝構造要返回的HTML,處理頁面的顯示。
3) View:即業務邏輯層,與MVC中的C功能相同,接收請求、進行業務處理和返回應答,是連通Model層和Template的橋梁。
對照兩種模式發現,MTV模式中,用View層取代了Controller層的位置,用Template層取代了原來View層的位置,模板可以理解成它是一個HTML 頁面,HTML頁面的渲染在視圖層完成。具體來說,MTV設計模式的原理如圖2所示,詳細運行過程如下:
1) 用戶通過瀏覽器對服務器發起Request請求,服務器接收請求后,通過View的業務邏輯層進行分析,同時向Model層和Template層發送指令;
2) Model 層與數據庫進行交互,將數據返回給View層;
3) Template層接收到指令后,調用相應的模板,并返回給View層;
4) View層接收到模板與數據后,首先對模板進行渲染(即將相應的數據賦值給模板),然后組織成相應格式返回給瀏覽器,瀏覽器進行解析后并最終呈現給用戶。
通過以上兩種設計模式的比較,可以得出MTV是MVC的一種細化,它將原來MVC中的V層拿出來進行分離,視圖的顯示與如何顯示交給Template層,而View層更專注于實現業務邏輯。當然,Django 是有Controller層的,只不過它由框架本身來實現,所以不用關心它,更關注于M、T 和V。
4 項目案例
某中等職業學校需要開發一款B/S版的學生管理信息系統,主要功能和要求為:可新增學生信息、查詢學生信息、修改學生信息、刪除學生信息和瀏覽學生信息等。
4.1 需求分析
根據學生管理信息系統功能要求,可以劃分如下幾個模塊來實現,具體為:新增學生信息模塊、查詢學生信息模塊、修改學生信息模塊、刪除學生信息模塊和瀏覽學生信息模塊。由于Django是典范的MVC框架,能靈活地支持數據庫,而且有強大的后臺管理功能,所以以“瀏覽學生信息模塊”為例(其他模塊與之相似),討論Django MTV模式開發的一般步驟[2]。
4.2 項目結構與規劃
首先,列出本項目的目錄結構,如圖3 所示。
Stu_Manage是項目的主目錄,其內部的manage.py文件是項目的運行入口,指定配置文件路徑。下一級Stu_Manage文件夾內部的settings.py是整個項目的配置文件,是項目定制化配置。urls.py是主路由文件,通過URL控制器來處理不同的請求。wsgi.py是py?thon服務器程序連接到web服務器的通用協議文件,用來調用App的應用。stu_reginfo是項目內的一個應用,一般每個獨立的應用對應一個文件夾,目的是讓分類清晰,便于項目分工。
stu_reginfo目錄是MTV框架的核心部分,其中ad?min.py 文件是django 自帶的一個admin 管理模塊,models.py是數據模型文件,views.py是處理用戶請求和生成響應的視圖文件。
templates文件夾是保存應用程序的模板文件,一般包括html前端頁面內容。
到此,基于學生信息系統的MTV 框架目錄結構就清楚了,各文件部分的功能及作用也就明白了,以后開發人員依照此MTV框架,只需要根據自身的需求對框架中的各個目錄功能進行完善就可進行高效開發,設計出滿足自己需求的各類網站。
4.3 系統設計
由前面分析,得出MVC或MTV框架的大體設計流程是:1) 客戶端發起請求,路由對客戶發起的請求進行統一處理和分發給控制層;2) 控制層獲取請求,訪問數據層;3) 數據層對數據進行增刪改查,把數據返回給控制層;4) 控制層獲取數據,把數據調度給視圖(模板);5) 視圖(模板)對數據進行渲染,形成html文件返回給控制層;6) 控制層把渲染后的視圖(模板)返回給客戶端。下面以此流程為參考,完成“瀏覽學生信息模塊”的設計。
簡單說,ORM的主要功能為:根據對象的類型生成表結構;將對象、列表的操作,轉換為SQL語句;將SQL查詢到的結果轉換為對象、列表。
Django中的模型包含存儲數據的字段和約束,對應數據庫中唯一的表。在stu_reginfo應用中添加數據模型,執行數據庫遷移,即完成Model(模型)設計。
“ 瀏覽學生信息模塊”的數據模型文件是stu_reginfo文件夾中的models.py,根據需求其基本字段定義如下:
python代碼分離,模板定義了占位符及各種規范文檔該如何顯示的模板標簽。采用模板輸出時,需在項目下建立templates文件夾,再在其中建立html文件,在代碼中通過{{ }}輸出后臺需返回的內容。
本項目中瀏覽器端輸出學生信息瀏覽效果,通過模板文件stu_reginfo_list.html實現,主要代碼如下:
粗體代碼要理解透徹,其中{{ }}代表模板變量,表示視圖傳遞給模板的數據;{% %}表示模板標簽,實現語句控制功能。這一步就實現了動態生成HTML頁面功能,完成Template(模板)設計,這和前面修改setting.py配置文件就一致了。
Django中路由系統的作用是使視圖中處理數據的函數與請求的URL建立映射關系,請求時可根據urls.py中的條目找到請求對應的處理方法。根據前面設計,將路由規則stu_reginfo_list與視圖函數進行映射,修改項目的主路由文件urls.py內容如下:
4.4 項目測試
通過以上步驟,完成了M、T 和V的設計,現在可以啟動項目進行測試了,在命令行執行python man?age.py runserver命令啟動項目,若顯示如圖4提示,表示項目啟動正常,沒有錯誤。然后在瀏覽器中打開http://127.0.0.1:8000/stu_reginfo_list/,即可看到圖5結果,表明“瀏覽學生信息模塊”設計成功。
通過上面“瀏覽學生信息模塊”的設計也發現,MTV這種設計模式關鍵優勢在于各種組件之間的松耦合性,每個由Django驅動的Web應用都有獨立的目標,并且可單獨更改而不影響其他的部分。如開發者更改一個應用程序中的URL而不會影響到這個程序底層的實現,或者設計者改變HTML頁面的樣式而不用接觸Python代碼等特點[3]。
5 結論
本文以流行的MVC框架模式為指導,以學生管理信息系統中“瀏覽學生信息模塊”功能的實現為案例,分析說明了MVC框架開發的工作原理和思路,總結了Django MTV模式開發Web網站的基本流程和步驟,希望能對進一步深入理解并運用Django解決實際問題提供參考和幫助。