最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

全部開發(fā)者教程

Django 入門教程

課程導(dǎo)學(xué)
Django 慕課教程使用指南
Django開發(fā)實(shí)戰(zhàn)
35 開發(fā)實(shí)戰(zhàn)

Django 框架簡介

圖片描述

你好,歡迎來到這門《Django 框架》教程,這個教程會帶你學(xué)習(xí) Python 著名的 Web 開發(fā)框架 Django。這節(jié)課我們會詳細(xì)介紹 Django 框架的發(fā)展歷程以及 Django 框架的優(yōu)缺點(diǎn),并對其他 Web 開發(fā)框架做一個簡單的對比。有的同學(xué)可能只學(xué)習(xí)了基礎(chǔ)語法,對框架的概念不太了解,不用擔(dān)心,你可以先看一下這篇文章,對 Django 框架有一個大致的了解,后面的小節(jié)我們對 “什么是框架?” 做了詳細(xì)的闡述。

1. MVC 與 MTV 介紹

在 Web 框架中,架構(gòu)模式是其一個重要的特點(diǎn),往往一個 Web 框架會在設(shè)計之初選定好一種架構(gòu)模式,然后開始該模式設(shè)計和編寫相關(guān)代碼,而 Django 則是基于 MTV 架構(gòu)的模式 。

另一種流行的架構(gòu)模式為 MVC,它在 Java Web 框架中非常流行。MVC 全稱 Model View Controller,即模型 - 視圖 - 控制器。MTV 的全稱是 Model Templates View,即模型 - 模板 - 視圖。MTV 中的名詞解釋如下:

  • 模型:在程序中用于處理數(shù)據(jù)邏輯的部分,大部分情況下是對數(shù)據(jù)庫的增刪改查的操作;
  • 視圖:該層包含存取模型及調(diào)取恰當(dāng)模板的相關(guān)邏輯。用于封裝負(fù)責(zé)處理用戶請求及返回響應(yīng)的邏輯;
  • 模板 :用于處理用戶顯示部分的內(nèi)容,和 MVC 中的 V 是一樣的,通過 HTML 展示。它使用模板方法可以動態(tài)地生成 HTML。模板包含所需 HTML 輸出的靜態(tài)部分,以及一些特殊的語法,描述如何將動態(tài)內(nèi)容插入。

MTV 和 MVC 模式并沒有本質(zhì)上的區(qū)別,都是為了實(shí)現(xiàn)應(yīng)用的解耦,只是定義上有些不同。在 MTV 模式的 Web 框架中,沒有 Controll 層,這個是由框架內(nèi)部實(shí)現(xiàn),我們需要做的就是將 URL 對應(yīng)到視圖即可,通過這樣的 URL 配置,系統(tǒng)將一個請求發(fā)送到一個合適的視圖進(jìn)行處理。在 Django 框架中就實(shí)現(xiàn)了這樣一個 URL 分發(fā)器,它幫助分發(fā) URL 請求到對應(yīng)的視圖。

2. Django 框架介紹

首先來看看 Django 誕生的過程:

Django 是從真實(shí)世界的應(yīng)用中成長起來的,它是由堪薩斯(Kansas)州 Lawrence 城中的一個 網(wǎng)絡(luò)開發(fā)小組編寫的。 它誕生于 2003 年秋天,那時 Lawrence Journal-World 報紙的程序員 Adrian Holovaty 和 Simon Willison 開始用 Python 來編寫程序。當(dāng)時他們的 World Online 小組制作并維護(hù)當(dāng)?shù)氐膸讉€新聞?wù)军c(diǎn),并在以新聞界特有的快節(jié)奏開發(fā)環(huán)境中逐漸發(fā)展。這些站點(diǎn)包括有 LJWorld.comLawrence.comKUsports.com, 記者(或管理層) 要求增加的特征或整個程序都能在計劃時間內(nèi)快速地被建立,這些時間通常只有幾天或幾個小時。 因此,Adrian 和 Simon 開發(fā)了一種節(jié)省時間的網(wǎng)絡(luò)程序開發(fā)框架, 這是在截止時間前能完成程序的唯一途徑。2005 年的夏天,當(dāng)這個框架開發(fā)完成時,它已經(jīng)用來制作了很多個 World Online 的站點(diǎn)。 當(dāng)時 World Online 小組中的 Jacob Kaplan-Moss 決定把這個框架發(fā)布為一個開源軟件,于是 Django 正式出現(xiàn)在大眾眼前,并且得到了快速發(fā)展,原來的 World Online 的兩個開發(fā)者(Adrian and Jacob)仍然掌握著 Django,但是其發(fā)展方向受社區(qū)團(tuán)隊的影響更大。

Django 基于 MTV 模式,其框架示意圖如下:

圖片描述

Django 框架圖示

Django 框架的核心組件有

  • 用于創(chuàng)建模型的對象關(guān)系映射(ORM);

  • 基于正則表達(dá)式的 URL 分發(fā)器;

  • 視圖系統(tǒng),用于處理 URL 請求;

  • 模板系統(tǒng),用于將模板文件轉(zhuǎn)換成 HTML 文件,并在瀏覽器上顯示;

  • 緩存系統(tǒng),并提供多種緩存方式。

除此之外 Django 框架中還包括如下功能

  • 輕量級的、獨(dú)立的 Web 服務(wù)器,用于開發(fā)和測試;

  • 表單序列化及驗證系統(tǒng) (Form),用于 HTML 表單和數(shù)據(jù)庫存儲的數(shù)據(jù)之間的轉(zhuǎn)換;

  • 中間過濾組件,允許對請求處理的各個階段進(jìn)行干涉;

  • 序列化系統(tǒng),能夠生成或讀取采用 XMLJSON 表示的 Django 模型實(shí)例。

此外,Django 還內(nèi)置了許多有用的應(yīng)用,比如一個可擴(kuò)展的認(rèn)證系統(tǒng)、動態(tài)站點(diǎn)管理頁面等等。Django 前身就是在線新聞?wù)军c(diǎn),因此它是非常適合做 Web 站點(diǎn)開發(fā)的。

3. Django 的主要版本

到目前為止,Django 已經(jīng)經(jīng)歷了三個大的版本,迭代速度之快,令人不得不佩服。不過目前最新的 3.0 版本于 19 年 12 月發(fā)布,還處于快速迭代中,不推薦一開始生產(chǎn)環(huán)境就使用 3.0。下面我們簡單介紹下 Django 的 1.0 和 2.0 版本之間的主要差別:

支持的 Python 版本:這大概是 Django 1.0 和 2.0 之間一個最明顯的差別了。參考訪問文檔,如下:

Django version Python version
1.11 2.7, 3.4, 3.5, 3.6, 3.7 (added in 1.11.17)
2.0 3.4, 3.5, 3.6, 3.7
2.1 3.5, 3.6, 3.7
2.2 3.5, 3.6, 3.7, 3.8 (added in 2.2.8)

可以看到,Django 2.0 之后不再支持 Python 2,甚至 Python 3 的低版本。目前來看,Python 3 已經(jīng)成了主流,也希望初學(xué)者一開始就使用 Python 3 進(jìn)行編程,不用再糾結(jié)使用 Python 2 還是 Python 3。

  • Django 2 相比 Django 1 簡化了 URL 路由語法 以及移動友好的 contrib.admin;

  • 當(dāng)然,更多的是模塊功能代碼上的優(yōu)化和調(diào)整,更多變動細(xì)節(jié)可以參考這個地址。

最后,我們來看看新發(fā)布的 Django 3.0 相比 Django 2.0 又有哪些新特點(diǎn)呢?

  • 支持 MariaDB Django 現(xiàn)在官方支持 MariaDB 10.1 及以上版本;

  • 支持 ASGI Django 3.0 已經(jīng)完全支持 async 應(yīng)用了,并提供了部署異步應(yīng)用的說明;

  • 在 PostgreSQL 上支持 ExclusionConstraint;

  • Filter 表達(dá)式;

  • model field 的 choices 屬性現(xiàn)在支持自定義枚舉類型;

  • 一些小變更,就不一一列舉了,大家可以參考官方的 release 信息。

總而言之,Django 1.0 已經(jīng)逐漸退出歷史舞臺,2.0 版本是主流,3.0 則是未來。

4. Django 框架優(yōu)缺點(diǎn)

Django 框架作為一個流行的 Web 框架,其優(yōu)勢如下

  • 功能完善,文檔手冊豐富,可以說是應(yīng)有盡有。而且自帶大量常用工具和底層封裝;

  • 強(qiáng)大的數(shù)據(jù)庫訪問組件:開發(fā)者可以無差別使用各種數(shù)據(jù)庫,如 SQLite、MySQL 和 oracle 等幾乎所有的主流數(shù)據(jù)庫;

  • 靈活的 URL 映射:Django 使用正則表達(dá)式管理 URL 映射,靈活性高

  • 豐富的 Template 模板語言:類似 jinjia 模板語言,不但原生功能豐富,還可以自定義模板標(biāo)簽;

  • 自帶后臺管理系統(tǒng) admin:只需要通過簡單的幾行配置和代碼就可以實(shí)現(xiàn)一個完整的后臺數(shù)據(jù)管理控制平臺;

  • 完整的錯誤信息提示:在開發(fā)調(diào)試過程中如果出現(xiàn)運(yùn)行錯誤或者異常,Django 可以提供非常完整的錯誤信息幫助定位問題;

  • 豐富的 Django 插件市場:基于 Django 開發(fā)的第三方插件眾多,簡化站點(diǎn)開發(fā)的方方面面,比如實(shí)現(xiàn)更為強(qiáng)大的認(rèn)證系統(tǒng)、更為優(yōu)雅的 API 接口設(shè)計、更為精準(zhǔn)的調(diào)試插件等等。典型代表有 Django Rest Framework 等;

  • 代碼開源,社區(qū)活躍度高:遇到問題可以在社區(qū)求助或者直接學(xué)習(xí)源碼定位問題。

但是作為一個大而全的 Web 框架,它的缺點(diǎn)也是十分明顯的

  • 框架龐大,不夠精簡、捆綁的內(nèi)容太多。Flask 正好相反,它是一個精簡的微服務(wù)框架,除了 Flask 核心之外,幾乎沒有什么額外的代碼。正是捆綁的東西太多,封裝過度導(dǎo)致 Django 內(nèi)部模塊之間相互關(guān)聯(lián),耦合度高,不利于改造;

  • Django 在異步通信方面做得不好。最近發(fā)布的 3.0 版本中似乎加入了異步通信功能,但仍然處于初級開發(fā)階段。相比之下 Tornado 框架是異步通信功能做得最好的,通常被稱為高性能的 Web 框架。

5. 其他的 Python Web 框架介紹

5.1 Flask

和 Django 直接競爭的 Web 框架莫過于 FlaskTornado 了。Flask 是除了 Django 之外另一個流行的 Python Web 框架。Flask 的設(shè)計哲學(xué)和 Django 恰恰相反,它不會替開發(fā)者做選擇,有且只有一個核心的模塊,因此沒有過多的額外功能。

Flask 可以被稱為一個微框架,服務(wù)的更多功能會由開發(fā)者自行選擇的插件提供。因此,F(xiàn)lask 的強(qiáng)大第三方市場也使得其與 Django 能在正面上產(chǎn)生競爭。其在 GitHub 上的關(guān)注度和社區(qū)活躍度與 Django 類似,這也表明越來越多的開發(fā)者正在關(guān)注著 Flask。Flask 起步比較晚,社區(qū)和生態(tài)不如 Django 那樣完善,此外它不如 Django 那樣對初學(xué)者友好,學(xué)習(xí)成本相比 Django 要高。

5.2 Tornado

Tornado 與現(xiàn)代主流的 Web 服務(wù)器框架有著明顯的區(qū)別:它是非阻塞式的服務(wù)器,速度相當(dāng)快。這得益于其非阻塞的方式和對 epoll 的運(yùn)用。Tornado 可以處理數(shù)以千計的連接,對于實(shí)時 Web 來說 Tornado 確實(shí)是一個理想的 Web 框架。但是 Tornado 只適合特定場景的 Web 開發(fā), 它沒有 ORM,也沒有 Session 支持,框架中復(fù)用的模塊非常少,因此用它開發(fā) Web 服務(wù)時,很多功能需要自己定制和編寫,開發(fā)速度會比較慢,使用成本高。

6. 本課程學(xué)習(xí)基礎(chǔ)

本課程的學(xué)習(xí)除了介紹 Django 框架的基本使用外,后面很多時候我會帶領(lǐng)大家進(jìn)入 Django 框架的源碼進(jìn)行學(xué)習(xí),Django 框架的源碼其實(shí)并不是非常復(fù)雜,有時候也會有寫的很簡單的部分,我會盡量簡化代碼帶領(lǐng)大家更深入地學(xué)習(xí) Django 框架。因此,為了學(xué)好這門課程,我們需要掌握以下幾個基礎(chǔ)知識:

  • 前端基礎(chǔ):包括 HTML/CSS,JS 代碼寫的會比較少,但是作為一個 Web 服務(wù)開發(fā)者,JS 基礎(chǔ)是必要的;

  • Python 基礎(chǔ):掌握基本的 Python 編程知識,然后深入了解一些關(guān)于魔法函數(shù)的知識,這在 Django 的源碼中會經(jīng)常用到;

  • 英文基礎(chǔ):官網(wǎng)文檔對 Django 有著非常詳細(xì)的描述,幾乎所有的教材、專欄以及個人寫的博客,包括本專欄都會大量參考官方文檔,這是最權(quán)威的 Django 資料。希望本課程學(xué)習(xí)完畢后,你也能繼續(xù)到官方網(wǎng)站上繼續(xù)學(xué)習(xí)并閱讀最新的手冊。只有不斷地學(xué)習(xí),不斷地翻看和調(diào)試源碼,不斷實(shí)踐,最后才能成為精通 Django 的開發(fā)者。

7. 小結(jié)

本小節(jié)中,我們詳細(xì)介紹了 Django 框架以及其提供的功能,然后對比分析 Django 框架的優(yōu)缺點(diǎn)。最后介紹了其他的 Python Web 框架并同 Django 進(jìn)行了對比。