第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Django 入門教程

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

Django 框架簡(jiǎn)介

圖片描述

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

1. MVC 與 MTV 介紹

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

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

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

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

2. Django 框架介紹

首先來(lái)看看 Django 誕生的過程:

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

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

圖片描述

Django 框架圖示

Django 框架的核心組件有

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

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

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

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

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

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

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

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

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

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

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

3. Django 的主要版本

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

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

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 的低版本。目前來(lái)看,Python 3 已經(jīng)成了主流,也希望初學(xué)者一開始就使用 Python 3 進(jìn)行編程,不用再糾結(jié)使用 Python 2 還是 Python 3。

  • Django 2 相比 Django 1 簡(jiǎn)化了 URL 路由語(yǔ)法 以及移動(dòng)友好的 contrib.admin;

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

最后,我們來(lái)看看新發(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)逐漸退出歷史舞臺(tái),2.0 版本是主流,3.0 則是未來(lái)。

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

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

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

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

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

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

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

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

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

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

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

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

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

5. 其他的 Python Web 框架介紹

5.1 Flask

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

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

5.2 Tornado

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

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

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

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

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

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

7. 小結(jié)

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