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

全部開發(fā)者教程

Django 入門教程

Django開發(fā)實戰(zhàn)
35 開發(fā)實戰(zhàn)

Django 框架簡介

圖片描述

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

1. MVC 與 MTV 介紹

在 Web 框架中,架構模式是其一個重要的特點,往往一個 Web 框架會在設計之初選定好一種架構模式,然后開始該模式設計和編寫相關代碼,而 Django 則是基于 MTV 架構的模式 。

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

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

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

2. Django 框架介紹

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

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

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

圖片描述

Django 框架圖示

Django 框架的核心組件有

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

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

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

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

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

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

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

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

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

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

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

3. Django 的主要版本

到目前為止,Django 已經經歷了三個大的版本,迭代速度之快,令人不得不佩服。不過目前最新的 3.0 版本于 19 年 12 月發(fā)布,還處于快速迭代中,不推薦一開始生產環(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 已經成了主流,也希望初學者一開始就使用 Python 3 進行編程,不用再糾結使用 Python 2 還是 Python 3。

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

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

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

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

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

  • 在 PostgreSQL 上支持 ExclusionConstraint;

  • Filter 表達式;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. 其他的 Python Web 框架介紹

5.1 Flask

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

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

5.2 Tornado

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

6. 本課程學習基礎

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

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

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

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

7. 小結

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