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