Django開發:概述

儲備知識:
socket網絡編程
web框架本質

Django起源

在這裏插入圖片描述
Django是一個由Python編寫的具有完整架站能力的開源Web框架。使用Django,只要很少的代碼,Python的程序開發人員就可以輕鬆地完成一個正式網站所需要的大部分內容,並進一步開發出全功能的Web服務。

Django本身基於MVC模型,即Model(模型)+View(視圖)+ Controller(控制器)設計模式,因此天然具有MVC的出色基因:開發快捷、部署方便、可重用性高、維護成本低等。Python+Django是快速開發、設計、部署網站的最佳組合。

Django誕生於2003年,2006年加入了BSD許可證,成爲開源的Web框架。Django這一詞語是根據比利時的爵士音樂家Django Reinhardt命名的,有希望Django能夠優雅地演奏(開發)各種樂曲(Web應用)的美好含義。

Django是由美國堪薩斯(Kansas)州Lawrence城中的一個新聞開發小組開發出來的。當時Lawrence Journal-World報紙的程序員Adrian Holovaty和Simon Willison用 Python 編寫Web新聞應用,他們的 World Online小組製作並維護了當地的幾個新聞站點。新聞界獨有的特點是快速迭代,從開發到上線,通常只有幾天或幾個小時的時間。爲了能在截止時間前完成工作,Adrian和Simon打算開發一種通用的高效的網絡應用開發框架,也就是Django。

2005年的夏天,當這個框架開發完成時,它已經用來製作了很多個World Online的站點。不久,小組中的Jacob Kaplan-Moss決定把這個框架發佈爲一個開源軟件,於是短短數年,Django項目就有着數以萬計的用戶和貢獻者,在世界範圍內廣泛傳播。 原來的World Online的兩個開發者(Adrian and Jacob)仍然掌握着Django,但是其發展方向受社區團隊的影響更大。

Django項目首頁 GitHub地址

MVC架構

如何設計一個程序的結構,這是一門專門的學問,叫做"架構模式"(architectural pattern),屬於編程的方法論。MVC模式就是架構模式的一種,它不僅適用於開發軟件,也適用於其他廣泛的設計和組織工作。

MVC是三個單詞的首字母縮寫,它們是Model(模型)、View(視圖)和Controller(控制)。這個模式認爲,程序不論簡單或複雜,從結構上看,都可以分成三層。
在這裏插入圖片描述

1.最上面的一層,是直接面向最終用戶的"視圖層"(View)。它是提供給用戶的操作界面,是程序的外殼。

2.最底下的一層,是核心的"數據層"(Model),也就是程序需要操作的數據或信息。

3.中間的一層,就是"控制層"(Controller),它負責根據用戶從"視圖層"輸入的指令,選取"數據層"中的數據,然後對其進行相應的操作,產生最終結果。

這三層是緊密聯繫在一起的,但又是互相獨立的,每一層內部的變化不影響其他層。每一層都對外提供接口(Interface),供上面一層調用。這樣一來,軟件就可以實現模塊化,修改外觀或者變更數據都不用修改其他層,大大方便了維護和升級。

在這裏插入圖片描述

我用Windows的計算器小程序爲例,解釋一下MVC模式,雖然它不一定使用這個模式編寫。

在這個計算器程序中,外部的那些按鈕和最上面的顯示條,就是"視圖層",那些需要運算的數字就是"數據層",執行加減乘除的那些內部運算步驟就是"控制層"。每一層執行不同的功能,整個程序的結構非常清楚。

如果我們擴大一點想象,就會發現,很多程序本質上都是這種模式:對外提供一組觸發器(本例中是按鈕),然後執行一些內部操作,最後返回結果。因此,MVC模式的應用是非常廣泛的。
在這裏插入圖片描述
在我看來,不僅編寫程序可以用MVC模式,家用電器也可以用。

以家用微波爐爲例,可以將它也理解成三層結構。最簡單的情況下,微波爐的操作用兩個轉盤實現,一個控制溫度,另一個控制時間。這兩個轉盤就是"視圖層"(view),而其內部的微波產生裝置則是"數據層"(Model),這裏的"數據"需要理解成"核心功能"。至於將用戶通過轉盤輸入的信息,轉換成對微波產生器的操作,則用"控制層"來實現。

如果每一層都是獨立的,那麼微波爐外部更換一個新潮的外殼,或者內部更換更大功率的微波產生器,完全可以在不更改其他層的情況下實現。這就是MVC模式的優勢。

再進一步,如果將MVC模式解釋成"外觀"、"機制"和"功能/數據"這三層結構,那麼很多人類組織也可以通過MVC模式架構。

比如一家商場,完全可以分成三部分。一部分是倉庫,負責提供商品,這是"功能層"(或者"數據層");另一部分是零售鋪面,負責銷售商品,這是它的"外觀層";兩者之間就是"機制層",包括櫃檯和倉庫之間一切互動的機制。

這樣區分以後,這個商場的結構就變得非常清楚,可以針對不同的層進行優化,提高效率。

公司、政黨、政府、醫院、學校等等,這些組織不管是盈利性還是非盈利性的,都可以從MVC模式的角度,進行架構,由一個個執行特定功能、可重複使用的模塊組成。
在這裏插入圖片描述

MTV架構

Django框架的設計模式借鑑了MVC框架的思想,也是分成三部分,來降低各個部分之間的耦合性。Django框架的不同之處在於它拆分的三部分爲:Model(模型)、Template(模板)和View(視圖),也就是MTV框架。

在這裏插入圖片描述

1.Model(模型):負責業務對象與數據庫的對象(ORM)

2.Template(模版):負責如何把頁面展示給用戶

3.View(視圖):負責業務邏輯,並在適當的時候調用Model和Template

此外,Django還有一個urls分發器,它的作用是將一個個URL的頁面請求分發給不同的view處理,view再調用相應的Model和Template。

Django請求生命週期

在這裏插入圖片描述
在這裏插入圖片描述

  • wsgi, 他就是socket服務端,用於接收用戶請求並將請求進行初次封裝,然後將請求交給web框架(Flask、Django)

  • 中間件,幫助我們對請求進行校驗或在請求對象中添加其他相關數據,例如:csrf、request.session

  • 路由匹配(urls分發器),將一個個URL的頁面請求分發給不同的View(視圖)處理

  • View(視圖),在View(視圖)中進行業務邏輯的處理,可能涉及到:Model(從數據庫中取數據)、Template(待返回的HTML頁面)

  • 中間件,對響應的數據進行處理。

  • wsgi,將響應的內容發送給瀏覽器。

Django優缺點

優點:

  • 功能完善、要素齊全:該有的、可以沒有的都有,自帶大量常用工具和框架,無須你自定義、組合、增刪及修改。
  • 完善的文檔:經過十多年的發展和完善,Django有廣泛的實踐案例和完善的在線文檔。開發者遇到問題時可以搜索在線文檔尋求解決方案。
  • 強大的數據庫訪問組件:Django的Model層自帶數據庫ORM組件,使得開發者無須學習其他數據庫訪問技術(SQL、pymysql、SQLALchemy等)。
  • 靈活的URL映射:Django使用正則表達式管理URL映射,靈活性高。新版的2.0,進一步提高了URL編寫的優雅性。
  • 豐富的Template模板語言:類似jinjia模板語言,不但原生功能豐富,還可以自定義模板標籤,並且與其ORM的用法非常相似。
  • 自帶後臺管理系統admin:只需要通過簡單的幾行配置和代碼就可以實現一個完整的後臺數據管理控制平臺。
  • 完整的錯誤信息提示:在開發調試過程中如果出現運行錯誤或者異常,Django可以提供非常完整的錯誤信息幫助定位問題。

缺點:

  • 框架龐大,被認爲不夠精簡、捆綁的內容太多(我不認爲這是缺點)
  • 耦合度偏高
  • 性能偏低,對服務器及帶寬要求高
  • 異步通信略有欠缺(Django3.0已開始融入ASGI)
Django開發指南

Django The web framework for perfectionists with deadlines.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章