Django3 中文教程


閱讀(1275.1k) 收藏 (153)

手冊簡介

Django3 教程 Django 是一個開放源代碼的Web應用框架,由Python寫成。

手冊說明

Django教程簡介

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)明白了, 但是在教給別人的時候確說不清楚, 所以慢慢的學會了以教促學這種方法, 在教給別人知識的同時也能夠提升自己對語言, 對框架的理解.

希望達到的目標:

  • 希望能寫出一個系列文章, 我也不知道到底能寫多少
  • 能夠讓認真閱讀這個系列的文章的人, 能在讀完之后做出一個簡單的博客
  • 教會讀者使用簡單的git操作和github
  • 希望能夠加深自己對Django的理解

Django是python中目前風靡的Web Framework, 那么什么叫做Framework呢, 框架能夠幫助你把程序的整體架構搭建好, 而我們所需要做的工作就是填寫邏輯, 而框架能夠在合適的時候調用你寫的邏輯, 而不需要我們自己去調用邏輯, 讓Web開發(fā)變的更敏捷.

Django是一個高級Python Web框架, 鼓勵快速,簡潔, 以程序設計的思想進行開發(fā). 通過使用這個框架, 可以減少很多開發(fā)麻煩, 使你更專注于編寫自己的app, 而不需要重復造輪子. Django免費并且開源.

Django特點

  • 完全免費并開源源代碼
  • 快速高效開發(fā)
  • 使用MTV架構(熟悉Web開發(fā)的應該會說是MVC架構)
  • 強大的可擴展性.

工作方式

用戶在瀏覽器中輸入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)很簡單,還是暴露了一些問題和不便的地方。 問你自己這幾個問題:

  • 應用中有多處需要連接數(shù)據(jù)庫會怎樣呢? 每個獨立的CGI腳本,不應該重復寫數(shù)據(jù)庫連接的代碼。 比較實用的辦法是寫一個共享函數(shù),可被多個代碼調用。
  • 一個開發(fā)人員 確實 需要去關注如何輸出Content-Type以及完成所有操作后去關閉數(shù)據(jù) 庫么? 此類問題只會降低開發(fā)人員的工作效率,增加犯錯誤的幾率。 那些初始化和釋放 相關的工作應該交給一些通用的框架來完成。
  • 如果這樣的代碼被重用到一個復合的環(huán)境中會發(fā)生什么? 每個頁面都分別對應獨立的數(shù)據(jù)庫和密碼嗎?
  • 如果一個Web設計師,完全沒有Python開發(fā)經(jīng)驗,但是又需要重新設計頁面的話,又將 發(fā)生什么呢? 一個字符寫錯了,可能導致整個應用崩潰。 理想的情況是,頁面顯示的邏輯與從數(shù)據(jù)庫中讀取書本記錄分隔開,這樣 Web設計師的重新設計不會影響到之前的業(yè)務邏輯。

以上正是Web框架致力于解決的問題。 Web框架為應用程序提供了一套程序框架, 這樣你可以專注于編寫清晰、易維護的代碼,而無需從頭做起。 簡單來說,這就是Django所能做的。

MVC 設計模式

讓我們來研究一個簡單的例子,通過該實例,你可以分辨出,通過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é);只要用心感覺整體的設計。 這里只關注分割后的幾個文件:

  • models.py 文件主要用一個 Python 類來描述數(shù)據(jù)表。 稱為 模型(model) 。 運用這個類,你可以通過簡單的 Python 的代碼來創(chuàng)建、檢索、更新、刪除 數(shù)據(jù)庫中的記錄而無需寫一條又一條的SQL語句。
  • views.py文件包含了頁面的業(yè)務邏輯。 latest_books()函數(shù)叫做視圖。
  • urls.py 指出了什么樣的 URL 調用什么的視圖。 在這個例子中 /latest/ URL 將會調用 latest_books()這個函數(shù)。 換句話說,如果你的域名是example.com,任何人瀏覽網(wǎng)址 http://example.com/latest/將會調用latest_books()這個函數(shù)。
  • latest_books.html 是 html 模板,它描述了這個頁面的設計是如何的。 使用帶基本邏輯聲明的模板語言,如{% for book in book_list %}

結合起來,這些部分松散遵循的模式稱為模型-視圖-控制器(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產生的背景,歷史有助于理解Django的實現(xiàn)方式。

如果你曾編寫過網(wǎng)絡應用程序。 那么你很有可能熟悉之前我們的 CGI 例子。

  1. 從頭開始編寫網(wǎng)絡應用程序。
  2. 從頭編寫另一個網(wǎng)絡應用程序。
  3. 從第一步中總結(找出其中通用的代碼),并運用在第二步中。
  4. 重構代碼使得能在第 2 個程序中使用第 1 個程序中的通用代碼。
  5. 重復 2-4 步驟若干次。
  6. 意識到你發(fā)明了一個框架。

這正是為什么 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ā)中最好的實踐。

Python所需知識

本質上來說, 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版本支持

此書內容對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郵件列表是很多Django用戶提出問題、回答問題的地方。 可以通過 http://www.djangoproject.com/r/django-users 來免費注冊。
  • 如果Django用戶遇到棘手的問題,希望得到及時地回復,可以使用Django IRC channel。 在Freenode IRC network加入#django

最后,本教程希望通過文字和圖的結合讓讀者能夠初步理解Django的工作方式。


領取免費資料

掃描下方二維碼或打開微信搜一搜“w3cschool編程獅”關注公眾號回復關鍵詞【Python123】或者【Python資料包】免費領取 Python 學習資料,包含軟件安裝包,思維導圖等

w3cschool編程獅微信公眾號


在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號