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