Django3 教程 Django 是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。
Django是一個(gè)可以使Web開(kāi)發(fā)工作愉快并且高效的Web開(kāi)發(fā)框架。 使用Django,使你能夠以最小的代價(jià)構(gòu)建和維護(hù)高質(zhì)量的Web應(yīng)用。
從好的方面來(lái)看,Web 開(kāi)發(fā)激動(dòng)人心且富于創(chuàng)造性;從另一面來(lái)看,它卻是份繁瑣而令人生厭的工作。 通過(guò)減少重復(fù)的代碼,Django 使你能夠?qū)W⒂?Web 應(yīng)用上有 趣的關(guān)鍵性的東西。 為了達(dá)到這個(gè)目標(biāo),Django 提供了通用Web開(kāi)發(fā)模式的高度抽象,提供了頻繁進(jìn)行的編程作業(yè)的快速解決方法,以及為“如何解決問(wèn)題”提供了清晰明了的約定。 同時(shí),Django 嘗試留下一些方法,來(lái)讓你根據(jù)需要在framework之外來(lái)開(kāi)發(fā)。
本教程的目的是將你培養(yǎng)成Django專家。 主要側(cè)重于兩方面: 第一,我們深度解釋 Django 到底做了哪些工作以及如何用她構(gòu)建Web應(yīng)用;第二,我們將會(huì)在適當(dāng)?shù)牡胤接懻摳呒?jí)的概念,并解釋如何 在自己的項(xiàng)目中高效的使用這些工具。 通過(guò)閱讀此書(shū),你將學(xué)會(huì)快速開(kāi)發(fā)功能強(qiáng)大網(wǎng)站的技巧,并且你的代碼將會(huì)十分 清晰,易于維護(hù)。 本書(shū)的代碼清晰,易維護(hù),通過(guò)學(xué)習(xí),可以快速開(kāi)發(fā)功能強(qiáng)大的網(wǎng)站。
喜歡一個(gè)學(xué)習(xí)觀點(diǎn)以教促學(xué), 一直以來(lái), 學(xué)習(xí)的時(shí)候經(jīng)常會(huì)發(fā)現(xiàn), 某個(gè)方法某個(gè)問(wèn)題自己已經(jīng)明白了, 但是在教給別人的時(shí)候確說(shuō)不清楚, 所以慢慢的學(xué)會(huì)了以教促學(xué)這種方法, 在教給別人知識(shí)的同時(shí)也能夠提升自己對(duì)語(yǔ)言, 對(duì)框架的理解.
希望達(dá)到的目標(biāo):
Django是python中目前風(fēng)靡的Web Framework, 那么什么叫做Framework呢, 框架能夠幫助你把程序的整體架構(gòu)搭建好, 而我們所需要做的工作就是填寫(xiě)邏輯, 而框架能夠在合適的時(shí)候調(diào)用你寫(xiě)的邏輯, 而不需要我們自己去調(diào)用邏輯, 讓W(xué)eb開(kāi)發(fā)變的更敏捷.
Django是一個(gè)高級(jí)Python Web框架, 鼓勵(lì)快速,簡(jiǎn)潔, 以程序設(shè)計(jì)的思想進(jìn)行開(kāi)發(fā). 通過(guò)使用這個(gè)框架, 可以減少很多開(kāi)發(fā)麻煩, 使你更專注于編寫(xiě)自己的app, 而不需要重復(fù)造輪子. Django免費(fèi)并且開(kāi)源.
用戶在瀏覽器中輸入U(xiǎn)RL后的回車, 瀏覽器會(huì)對(duì)URL進(jìn)行檢查, 首先判斷協(xié)議,如果是http就按照 Web 來(lái)處理, 然互調(diào)用DNS查詢, 將域名轉(zhuǎn)換為IP地址, 然后經(jīng)過(guò)網(wǎng)絡(luò)傳輸?shù)竭_(dá)對(duì)應(yīng)Web服務(wù)器, 服務(wù)器對(duì)url進(jìn)行解析后, 調(diào)用View中的邏輯(MTV中的V), 其中又涉及到Model(MTV中的M), 與數(shù)據(jù)庫(kù)的進(jìn)行交互, 將數(shù)據(jù)發(fā)到Template(MTV中的T)進(jìn)行渲染, 然后發(fā)送到瀏覽器中, 瀏覽器以合適的方式呈現(xiàn)給用戶
Django 在新一代的 Web框架 中非常出色,為什么這么說(shuō)呢?
為回答該問(wèn)題,讓我們考慮一下_不使用_框架設(shè)計(jì) Python 網(wǎng)頁(yè)應(yīng)用程序的情形。 貫穿整本書(shū),我們多次展示不使用框架實(shí)現(xiàn)網(wǎng)站基本功能的方法,讓讀者認(rèn)識(shí)到框架開(kāi)發(fā)的方便。 (不使用框架,更多情況是沒(méi)有合適的框架可用。 最重要的是,理解實(shí)現(xiàn)的來(lái)龍去脈會(huì)使你成為一個(gè)優(yōu)秀的web開(kāi)發(fā)者。)
使用Python開(kāi)發(fā)Web,最簡(jiǎn)單,原始和直接的辦法是使用CGI標(biāo)準(zhǔn),在1998年這種方式很流行。 現(xiàn)在從應(yīng)用角度解釋它是如何工作: 首先做一個(gè)Python腳本,輸出HTML代碼,然后保存成.cgi擴(kuò)展名的文件,通過(guò)瀏覽器訪問(wèn)此文件。 就是這樣。
如下示例,用Python CGI腳本顯示數(shù)據(jù)庫(kù)中最新出版的10本書(shū): 不用關(guān)心語(yǔ)法細(xì)節(jié);僅僅感覺(jué)一下基本實(shí)現(xiàn)的方法:
#!/usr/bin/env python
import MySQLdb
print "Content-Type: text/html\n"
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"
connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")
for row in cursor.fetchall():
print "<li>%s</li>" % row[0]
print "</ul>"
print "</body></html>"
connection.close()
首先,用戶請(qǐng)求CGI,腳本代碼打印Content-Type行,后面跟著換行。 再接下 來(lái)是一些HTML的起始標(biāo)簽,然后連接數(shù)據(jù)庫(kù)并執(zhí)行一些查詢操作,獲取最新的十本書(shū)。 在遍歷這些書(shū)的同時(shí),生成一個(gè)書(shū)名的HTML列表項(xiàng)。 最后,輸出HTML的結(jié)束標(biāo)簽并且關(guān)閉數(shù)據(jù)庫(kù)連接。
像這樣的一次性的動(dòng)態(tài)頁(yè)面,從頭寫(xiě)起的方法并非一定不好。 其中一點(diǎn): 這些代碼簡(jiǎn)單易懂,就算是一個(gè)初起步的 開(kāi)發(fā)者都能讀明白這16行的Python的代碼,而且這些代碼從頭到尾做了什么都能了解得一清二楚。 不需要學(xué)習(xí)額外 的背景知識(shí),沒(méi)有額外的代碼需要去了解。 同樣,也易于部署這16行代碼,只需要將它保存為一個(gè)latestbooks.cgi 的 文件,上傳到網(wǎng)絡(luò)服務(wù)器上,通過(guò)瀏覽器訪問(wèn)即可。
盡管實(shí)現(xiàn)很簡(jiǎn)單,還是暴露了一些問(wèn)題和不便的地方。 問(wèn)你自己這幾個(gè)問(wèn)題:
以上正是Web框架致力于解決的問(wèn)題。 Web框架為應(yīng)用程序提供了一套程序框架, 這樣你可以專注于編寫(xiě)清晰、易維護(hù)的代碼,而無(wú)需從頭做起。 簡(jiǎn)單來(lái)說(shuō),這就是Django所能做的。
讓我們來(lái)研究一個(gè)簡(jiǎn)單的例子,通過(guò)該實(shí)例,你可以分辨出,通過(guò)Web框架來(lái)實(shí)現(xiàn)的功能與之前的方式有何不同。 下面就是通過(guò)使用Django來(lái)完成以上功能的例子: 首先,我們分成4個(gè)Python的文件,(models.py ,views.py , urls.py ) 和html模板文件 (latest_books.html )
# models.py (the database tables)
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=50)
pub_date = models.DateField()
# views.py (the business logic)
from django.shortcuts import render_to_response
from models import Book
def latest_books(request):
book_list = Book.objects.order_by('-pub_date')[:10]
return render_to_response('latest_books.html', {'book_list': book_list})
# urls.py (the URL configuration)
from django.conf.urls.defaults import *
import views
urlpatterns = patterns('',
(r'^latest/$', views.latest_books),
)
# latest_books.html (the template)
<html><head><title>Books</title></head>
<body>
<h1>Books</h1>
<ul>
{% for book in book_list %}
<li>{{ book.name }}</li>
{% endfor %}
</ul>
</body></html>
然后,不用關(guān)心語(yǔ)法細(xì)節(jié);只要用心感覺(jué)整體的設(shè)計(jì)。 這里只關(guān)注分割后的幾個(gè)文件:
結(jié)合起來(lái),這些部分松散遵循的模式稱為模型-視圖-控制器(MVC)。 簡(jiǎn)單的說(shuō), MVC 是一種軟件開(kāi)發(fā)的方法,它把代碼的定義和數(shù)據(jù)訪問(wèn)的方法(模型)與請(qǐng)求邏輯 (控制器)還有用戶接口(視圖)分開(kāi)來(lái)。 我們將在第5章更深入地討論MVC。
這種設(shè)計(jì)模式關(guān)鍵的優(yōu)勢(shì)在于各種組件都是 松散結(jié)合 的。這樣,每個(gè)由 Django驅(qū)動(dòng) 的Web應(yīng)用都有著明確的目的,并且可獨(dú)立更改而不影響到其它的部分。 比如,開(kāi)發(fā)者 更改一個(gè)應(yīng)用程序中的 URL 而不用影響到這個(gè)程序底層的實(shí)現(xiàn)。 設(shè)計(jì)師可以改變 HTML 頁(yè)面 的樣式而不用接觸 Python 代碼。 數(shù)據(jù)庫(kù)管理員可以重新命名數(shù)據(jù)表并且只需更改一個(gè)地方,無(wú)需從一大堆文件中進(jìn)行查找和替換。
本書(shū)中,每個(gè)組件都有它自己的一個(gè)章節(jié)。 比如,第三章涵蓋了視圖,第四章是模板, 而第五章是模型。
在我們討論代碼之前我們需要先了解一下 Django 的歷史。 從上面我們注意到:我們將向你展示如何不使用捷徑來(lái)完成工作,以便能更好的理解捷徑的原理 同樣,理解Django產(chǎn)生的背景,歷史有助于理解Django的實(shí)現(xiàn)方式。
如果你曾編寫(xiě)過(guò)網(wǎng)絡(luò)應(yīng)用程序。 那么你很有可能熟悉之前我們的 CGI 例子。
這正是為什么 Django 建立的原因!
Django 是從真實(shí)世界的應(yīng)用中成長(zhǎng)起來(lái)的,它是由 堪薩斯(Kansas)州 Lawrence 城中的一個(gè) 網(wǎng)絡(luò)開(kāi)發(fā)小組編寫(xiě)的。 它誕生于 2003 年秋天,那時(shí) Lawrence Journal-World 報(bào)紙的 程序員 Adrian Holovaty 和 Simon Willison 開(kāi)始用 Python 來(lái)編寫(xiě)程序。
當(dāng)時(shí)他們的 World Online 小組制作并維護(hù)當(dāng)?shù)氐膸讉€(gè)新聞?wù)军c(diǎn), 并在以新聞界特有的快節(jié)奏開(kāi)發(fā)環(huán)境中逐漸發(fā)展。 這些站點(diǎn)包括有 LJWorld.com、Lawrence.com 和 KUsports.com, 記者(或管理層) 要求增加的特征或整個(gè)程序都能在計(jì)劃時(shí)間內(nèi)快速的被建立,這些時(shí)間通常只有幾天 或幾個(gè)小時(shí)。 因此,Adrian 和 Simon 開(kāi)發(fā)了一種節(jié)省時(shí)間的網(wǎng)絡(luò)程序開(kāi)發(fā)框架, 這是在截止時(shí)間前能完成程序的唯一途徑。
2005 年的夏天,當(dāng)這個(gè)框架開(kāi)發(fā)完成時(shí),它已經(jīng)用來(lái)制作了很多個(gè) World Online 的站點(diǎn)。 當(dāng)時(shí) World Online 小組中的 Jacob Kaplan-Moss 決定把這個(gè)框架發(fā)布為一個(gè)開(kāi)源軟件。
從今往后數(shù)年,Django是一個(gè)有著數(shù)以萬(wàn)計(jì)的用戶和貢獻(xiàn)者,在世界廣泛傳播的完善開(kāi)源項(xiàng)目。 原來(lái)的World Online的兩個(gè)開(kāi)發(fā)者(Adrian and Jacob)仍然掌握著Django,但是其發(fā)展方向受社區(qū)團(tuán)隊(duì)的影響更大。
這些歷史都是相關(guān)聯(lián)的,因?yàn)樗齻儙椭忉屃撕苤匾膬牲c(diǎn)。
第一,Django最可愛(ài)的地方。 Django誕生于新聞網(wǎng)站的環(huán)境中,因此它提供很多了特性(如第6章會(huì)說(shuō)到的管理后臺(tái)),非常適合內(nèi)容類的網(wǎng)站,如Amazon.com, craigslist.org和washingtonpost.com,這些網(wǎng)站提供動(dòng)態(tài)的,數(shù)據(jù)庫(kù)驅(qū)動(dòng)的信息。 (不要看到這就感到沮喪,盡管Django擅長(zhǎng)于動(dòng)態(tài)內(nèi)容管理系統(tǒng), 但并不表示Django主要的目的就是用來(lái)創(chuàng)建動(dòng)態(tài)內(nèi)容的網(wǎng)站。 某些方面 特別高效 與其他方面 不高效 是有區(qū)別的, Django在其他方面也同樣高效。)
第二,Django的起源造就了它的開(kāi)源社區(qū)的文化。 因?yàn)镈jango來(lái)自于真實(shí)世界中的代碼,而不是 來(lái)自于一個(gè)科研項(xiàng)目或者商業(yè)產(chǎn)品,她主要集中力量來(lái)解決Web開(kāi)發(fā)中遇到的問(wèn)題,同樣 也是Django的開(kāi)發(fā)者經(jīng)常遇到的問(wèn)題。 這樣,Django每天在現(xiàn)有的基礎(chǔ)上進(jìn)步。 框架的開(kāi)發(fā)者對(duì)于讓開(kāi)發(fā)人員節(jié)省時(shí)間,編寫(xiě)更加容易維護(hù)的程序,同時(shí)保證程序運(yùn)行的效率具有極大的興趣。 無(wú)他,開(kāi)發(fā)者動(dòng)力來(lái)源于自己的目標(biāo):節(jié)省時(shí)間,快樂(lè)工作。 (坦率地講,他們使用了自己公司的產(chǎn)品。)
在編寫(xiě)本書(shū)時(shí),我們努力嘗試在可讀性和參考性間做一個(gè)平衡,當(dāng)然本書(shū)會(huì)偏向于可 讀性。 本書(shū)的目標(biāo),之前也提過(guò),是要將你培養(yǎng)成一名Django專家,我們相信,最好 的方式就是提供文章和充足的實(shí)例,而不是一堆詳盡卻乏味的關(guān)于Django特色的手冊(cè)。 (曾經(jīng)有人說(shuō)過(guò),如果僅僅教字母表是無(wú)法教會(huì)別人說(shuō)話的。
按照這種思路,我們推薦的就是按順序閱讀,從基礎(chǔ)開(kāi)始了解Django的獨(dú)特之處,等全部都閱讀完之后,就可以任意順序閱讀。
要回憶語(yǔ)法或查閱 Django 某部分的功能概要時(shí),你偶爾可能會(huì)回來(lái)翻翻這些資料以及 http://www.djangoproject.com/ 上的免費(fèi)文檔。
本書(shū)讀者需要理解基本的面向過(guò)程和面向?qū)ο缶幊蹋?流程控制( if , while 和 for ),數(shù)據(jù)結(jié)構(gòu)(列表,哈希表/字典),變量,類和對(duì)象。
Web開(kāi)發(fā)經(jīng)驗(yàn),正如你所想的,也是非常有幫助的,但是對(duì)于閱讀本書(shū),并不是必須的。 通過(guò)本書(shū),我們盡量給缺乏經(jīng)驗(yàn)的開(kāi)發(fā)人員提供在Web開(kāi)發(fā)中最好的實(shí)踐。
本質(zhì)上來(lái)說(shuō), Django 只不過(guò)是用 Python 編寫(xiě)的一組類庫(kù)。 用 Django 開(kāi)發(fā)站點(diǎn)就是使用這些類庫(kù)編寫(xiě) Python 代碼。 因此,學(xué)習(xí) Django 的關(guān)鍵就是學(xué)習(xí)如何進(jìn)行 Python 編程并理解 Django 類庫(kù)的運(yùn)作方式。
如果你有Python開(kāi)發(fā)經(jīng)驗(yàn),在學(xué)習(xí)過(guò)程中應(yīng)該不會(huì)有任何問(wèn)題。 基本上,Django的代碼并 沒(méi)有使用一些黑色魔法(例如代碼中的花哨技巧,某個(gè)實(shí)現(xiàn)解釋或者理解起來(lái)十分困難)。 對(duì)你來(lái)說(shuō),學(xué)習(xí)Django就是學(xué)習(xí)她的命名規(guī)則和API。
如果你沒(méi)有使用 Python 編程的經(jīng)驗(yàn),你一定會(huì)學(xué)到很多東西。 它是非常易學(xué)易用的。 雖然這本書(shū)沒(méi)有包括一個(gè)完整的 Python 教程, 但也算是一個(gè)恰當(dāng)?shù)慕榻B了 Python特征和 功能的集錦。 當(dāng)然,我們推薦你讀一下官方的 Python 教程,它可 以從 http://docs.python.org/tut/ 在線獲得。 另外我們也推薦 Mark Pilgrims的 書(shū)Dive Into Python ( http://www.diveintopython.org/ )
此書(shū)內(nèi)容對(duì)Django 3.0兼容。
學(xué)習(xí)本教程前你需要了解一些基礎(chǔ)的Web知識(shí)及Python基礎(chǔ)教程。
Django 版本與 Python 環(huán)境的對(duì)應(yīng)表:
Django 版本 | Python 版本 |
1.5 | 2.6.5, 2.7, 3.2, 3.3.
|
1.6 | 2.6, 2.7, 3.2, 3.3 |
1.7 | 2.7, 3.2, 3.3, 3.4 (2.6 不支持了) |
1.8 LTS | 2.7, 3.2, 3.3, 3.4, 3.5 (長(zhǎng)期支持版本 LTS) |
1.9 | 2.7, 3.4, 3.5 (3.3 不支持了) |
1.10 | 2.7, 3.4, 3.5 |
1.11 LTS | 2.7, 3.4, 3.5, 3.6 (最后一個(gè)支持 Python 2.7 的版本 ) |
2.0 | 3.4, 3.5, 3.6 (注意,不再支持 Python 2) |
2.1 | 3.5, 3.6, 3.7 |
2.2 LTS | 3.5, 3.6, 3.7 |
3.0 | 3.6, 3.7, 3.8 |
Django的最大的益處是,有一群樂(lè)于助人的人在Django社區(qū)上。 你可以毫無(wú)約束的提各種 問(wèn)題在上面,如:django的安裝,app 設(shè)計(jì),db 設(shè)計(jì),發(fā)布。
最后,本教程希望通過(guò)文字和圖的結(jié)合讓讀者能夠初步理解Django的工作方式。
掃描下方二維碼或打開(kāi)微信搜一搜“w3cschool編程獅”關(guān)注公眾號(hào)回復(fù)關(guān)鍵詞【Python123】或者【Python資料包】免費(fèi)領(lǐng)取 Python 學(xué)習(xí)資料,包含軟件安裝包,思維導(dǎo)圖等