Django是一款高性能的Python Web開發(fā)框架,本書全面講解Django開發(fā)相關(guān)的內(nèi)容。本書共分為24章,主要內(nèi)容包括Python Web開發(fā)的基礎(chǔ)知識、Django項(xiàng)目實(shí)戰(zhàn)、使用Django開發(fā)API、Django系統(tǒng)運(yùn)維等部分,其中基礎(chǔ)知識部分講解Python基礎(chǔ)知識、各種常用的數(shù)據(jù)結(jié)構(gòu)、正則表達(dá)式、HTTP協(xié)議、字符串編碼等;實(shí)戰(zhàn)開發(fā)部分講解兩個具體的項(xiàng)目,從功能需求設(shè)計(jì)、模塊劃分,再到*終的編碼實(shí)現(xiàn),手把手教你如何從零打造一個自己的項(xiàng)目;Django系統(tǒng)運(yùn)維部分講解如何線上部署一個系統(tǒng)、需要掌握的基礎(chǔ)知識、使用的每個組件的作用,讓讀者明白其中的原理,出現(xiàn)問題之后如何排查。
Python簡單易學(xué)、上手快速,成為很多程序員喜愛的編程語言。使用Python進(jìn)行Web應(yīng)用開發(fā),無疑能夠加快需求實(shí)現(xiàn)的速度,快速迭代和驗(yàn)證產(chǎn)品的原型。有些人可能會有疑問:Python性能不夠好,用來開發(fā)Web是不是不太合適?Python在性能上確實(shí)無法和C、Java等語言相比,但在大部分情況下使用Python開發(fā)是可以滿足性能需求的,并且很多時(shí)候程序性能不夠好,這不是語言本身的問題,而是架構(gòu)設(shè)計(jì)、緩存設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)算法的選用以及開發(fā)人員編程水平等引起的問題。總之,使用Python語言進(jìn)行Web開發(fā)有獨(dú)特的優(yōu)勢,通常能滿足大部分應(yīng)用場景的需求。
本書面向想學(xué)習(xí)Python Web開發(fā)的讀者,分5篇講解基礎(chǔ)知識和實(shí)戰(zhàn)。
第1篇是基礎(chǔ)知識,讓讀者對Python語言中各種常用的數(shù)據(jù)結(jié)構(gòu)及其算法有一定的了解,同時(shí)介紹常見數(shù)據(jù)結(jié)構(gòu)算法的時(shí)間復(fù)雜度,讓讀者從學(xué)習(xí)之初就有性能的意識,為將來編寫出高質(zhì)量的優(yōu)秀代碼打下基礎(chǔ)。本篇還對開發(fā)過程中會用到的相關(guān)知識點(diǎn)(比如正則表達(dá)式、HTTP協(xié)議、字符串編碼等)進(jìn)行講解,讓讀者對Python Web開發(fā)有一個全面的認(rèn)識。特別是對容易讓初學(xué)者困惑的知識,比如絕對路徑和相對路徑的區(qū)別、字符編碼相關(guān)的內(nèi)容,也進(jìn)行了講解。
第2篇和第3篇是實(shí)戰(zhàn)部分,主要講解“資源管理”和“個人博客系統(tǒng)”兩個項(xiàng)目。從功能需求設(shè)計(jì)、模塊劃分,再到最終的編碼實(shí)現(xiàn),手把手教讀者如何從零開始打造自己的項(xiàng)目。
第4篇是使用Django開發(fā)API,通過一個完整的教程,以逐步深入的方式,讓讀者享受使用Django Rest Framework進(jìn)行API開發(fā)的樂趣。
第5篇是Django系統(tǒng)運(yùn)維,讓讀者不僅能將服務(wù)部署好,而且還能明白各個組件的原理以及它們是如何在一起工作的,從而提高讀者分析問題和解決問題的能力。最后講解Django的一些常用功能,比如中間件、信號系統(tǒng)、緩存框架等,在講解過程中會深入講解它們的工作原理,以及使用中會遇到的一些“坑”。
本書的讀者
如果對Python有一定的了解,想學(xué)習(xí)Python Web開發(fā),本書會是一個不錯的選擇。
誰不適合讀本書
不太適合一點(diǎn)Python基礎(chǔ)都沒有的人員。另外,如果你已經(jīng)是Python Web開發(fā)方面的專家,那么這本書對你來說價(jià)值應(yīng)該也不大。
勘誤與反饋
本書所有章節(jié)中的源代碼放在https://github.com/djangobook-cn/book-code上,歡迎讀者從GitHub下載并提出問題(issue),如果下載有問題,可以通過郵箱booksaga@126.com與編者聯(lián)系。
致謝
在編寫本書時(shí),筆者得到了各個方面非常多的建議、幫助和鼓勵,在此深表感謝。
首先,特別感謝武漢大學(xué)的譚建揚(yáng)同學(xué)認(rèn)真細(xì)心地測試了書中的示例,指出了很多問題。
感謝研究生實(shí)驗(yàn)室中三位計(jì)算機(jī)專業(yè)的同學(xué)江超、張浩然和楊驍,這三位不僅僅是研究生期間的“戰(zhàn)友”,也在我們編寫本書期間給出了不少建議。
感謝趙軍出色的核對工作,提出了非常多的改進(jìn)意見。
最后,占用了大量周末時(shí)間來寫作,這和妻子lotus的大力支持是分不開的。
涂偉忠
序(一)
序(二)
前言
第1篇 基礎(chǔ)知識
第1章 Django簡介3
1.1 Django基本介紹3
1.2 Django發(fā)布情況4
1.3 Django的MVT架構(gòu)簡介5
1.3.1 MVC模式5
1.3.2 Django MVT模式5
1.4 Django和主流Web框架對比6
1.5 開發(fā)環(huán)境選擇6
1.5.1 Windows平臺7
1.5.2 Mac平臺7
1.5.3 Linux平臺8
第2章 掌握必要的基礎(chǔ)知識 9
2.1 Web開發(fā)需要什么基礎(chǔ)知識9
2.2 Python語言入門10
2.2.1 Python語言簡介11
2.2.2 執(zhí)行Python代碼的方式11
2.2.3 Python中的縮進(jìn)格式12
2.2.4 常見的運(yùn)算符13
2.2.5 數(shù)據(jù)類型14
2.2.6 字符串14
2.2.7 列表15
2.2.8 元組19
2.2.9 字典19
2.2.10 集合21
2.2.11 數(shù)據(jù)類型的轉(zhuǎn)換22
2.2.12 常見數(shù)據(jù)結(jié)構(gòu)操作的時(shí)間復(fù)雜度23
2.2.13 選擇語句與循環(huán)語句26
2.2.14 關(guān)于模塊27
2.2.15 Python中的函數(shù)28
2.2.16 Python中的類30
2.2.17 命令行參數(shù)32
2.2.18 引用和復(fù)制一個對象32
2.2.19 常用內(nèi)置函數(shù)33
2.2.20 常用模塊的功能35
2.3 正則表達(dá)式37
2.3.1 正則表達(dá)式中的元字符37
2.3.2 正則模塊的核心函數(shù)39
2.3.3 理解貪婪與非貪婪41
2.3.4 正則表達(dá)式中的Flag42
2.4 HTTP協(xié)議的基礎(chǔ)知識43
2.5 絕對路徑與相對路徑47
2.6 Python中的字符串編碼48
第3章 Django初步體驗(yàn)51
3.1 Django的請求和響應(yīng)51
3.2 Django的模型和admin站點(diǎn)52
3.2.1 新建blog應(yīng)用53
3.2.2 修改項(xiàng)目設(shè)置53
3.2.3 編寫模型代碼54
3.2.4 體驗(yàn)admin站點(diǎn)55
3.2.5 對admin站點(diǎn)進(jìn)行簡單定制58
3.3 初識 Django QuerySet62
3.3.1 基本查詢63
3.3.2 添加記錄64
3.3.3 修改記錄65
3.3.4 刪除記錄65
3.4 Django的視圖和函數(shù)65
第2篇 實(shí)踐學(xué)習(xí)一:從一個簡單的資源管理做起
第4章 需求的確定和項(xiàng)目排期規(guī)劃75
4.1 產(chǎn)品定位75
4.2 功能需求的確定76
4.3 產(chǎn)品設(shè)計(jì)的確定77
4.4 產(chǎn)品實(shí)現(xiàn)的排期77
第5章 數(shù)據(jù)模型的設(shè)計(jì)與實(shí)現(xiàn)79
5.1 模型簡介79
5.2 模型的數(shù)據(jù)字段79
5.2.1 數(shù)值類字段80
5.2.2 字符類字段80
5.2.3 布爾類字段81
5.2.4 日期時(shí)間類字段81
5.2.5 文件類字段82
5.2.6 IP地址類字段82
5.2.7 二進(jìn)制類字段83
5.3 模型關(guān)系字段83
5.3.1 外鍵字段83
5.3.2 多對多字段83
5.3.3 一對一字段84
5.4 字段參數(shù)84
5.5 圖書管理系統(tǒng)模型的實(shí)現(xiàn)85
5.6 數(shù)據(jù)庫查詢接口簡介88
5.6.1 創(chuàng)建對象89
5.6.2 修改對象89
5.6.3 查找對象90
5.6.4 刪除對象91
第6章 網(wǎng)站的入口——URL設(shè)計(jì)92
6.1 URL設(shè)計(jì)簡介92
6.2 URL反轉(zhuǎn)簡介94
第7章 頁面和功能的實(shí)現(xiàn)96
7.1 基本頁面的實(shí)現(xiàn)96
7.2 Django模板語言簡介101
7.3 Django用戶認(rèn)證和鑒權(quán)簡介106
7.4 用戶系統(tǒng)的實(shí)現(xiàn)109
7.4.1 用戶注冊功能的實(shí)現(xiàn)109
7.4.2 用戶登錄功能的實(shí)現(xiàn)115
7.4.3 用戶注銷功能的實(shí)現(xiàn)117
7.4.4 修改密碼功能的實(shí)現(xiàn)118
7.5 圖書管理相關(guān)功能的實(shí)現(xiàn)124
7.5.1 圖書添加功能的實(shí)現(xiàn)124
7.5.2 圖片上傳功能的實(shí)現(xiàn)128
7.5.3 圖書列表功能的實(shí)現(xiàn)131
7.5.4 圖書詳情功能的實(shí)現(xiàn)136
第3篇 實(shí)踐學(xué)習(xí)二:從博客做起
第8章 個人博客網(wǎng)站的規(guī)劃和設(shè)計(jì)141
8.1 功能需求的設(shè)計(jì)141
8.2 模塊劃分143
第9章 Django通用視圖簡介144
9.1 TemplateView簡介144
9.2 RedirectView簡介145
9.3 DetailView簡介145
9.4 ListView簡介146
9.5 FormView簡介147
9.6 CreateView簡介147
9.7 UpdateView簡介147
9.8 DeleteView簡介148
第10章 基本頁面框架的實(shí)現(xiàn)149
10.1 前端頁面框架的實(shí)現(xiàn)149
10.2 后端頁面框架的實(shí)現(xiàn)154
第11章 用戶系統(tǒng)和認(rèn)證模塊的實(shí)現(xiàn)158
11.1 同步數(shù)據(jù)庫文件158
11.2 用戶登錄功能的實(shí)現(xiàn)158
11.3 用戶注銷功能的實(shí)現(xiàn)164
第12章 導(dǎo)航欄組件的實(shí)現(xiàn)165
12.1 導(dǎo)航欄數(shù)據(jù)模型的設(shè)計(jì)165
12.2 導(dǎo)航欄前端組件的實(shí)現(xiàn)166
12.3 導(dǎo)航欄管理頁面的制作168
第13章 友情鏈接組件的實(shí)現(xiàn)180
13.1 友情鏈接數(shù)據(jù)模型的設(shè)計(jì)180
13.2 友情鏈接前端組件的實(shí)現(xiàn)181
13.3 友情鏈接管理頁面的實(shí)現(xiàn)182
第14章 “碎碎念”組件的實(shí)現(xiàn)191
14.1 “碎碎念”數(shù)據(jù)模型的設(shè)計(jì)191
14.2 “碎碎念”前端組件的實(shí)現(xiàn)192
14.3 “碎碎念”組件管理頁面的實(shí)現(xiàn)193
14.4 “碎碎念”前端TimeLine頁面的實(shí)現(xiàn)205
第15章 文章組件的實(shí)現(xiàn)209
15.1 文章數(shù)據(jù)模型的設(shè)計(jì)209
15.2 文章分類前端組件的實(shí)現(xiàn)210
15.3 文章分類管理的頁面212
15.4 文章管理頁面218
15.5 文章前端組件的實(shí)現(xiàn)234
第4篇 使用Django開發(fā)API
第16章 序列化241
16.1 搭建一個新的開發(fā)環(huán)境241
16.2 開始編寫Web API241
16.3 創(chuàng)建模型242
16.4 創(chuàng)建一個序列化類243
16.5 了解Serializers的工作方式244
16.6 使用ModelSerializers246
16.7 使用序列化器編寫常規(guī)的視圖247
16.8 測試Web API249
第17章 請求和響應(yīng)251
17.1 Request對象251
17.2 Response對象251
17.3 響應(yīng)狀態(tài)碼251
17.4 包裝 API 視圖252
17.5 使用新組件編寫視圖252
17.6 給URLs添加可選格式化后綴254
17.7 它看起來怎么樣255
17.8 API可瀏覽性257
第18章 基于類的視圖258
18.1 使用類視圖重寫API258
18.2 使用Mixins混入類260
18.3 使用通用類視圖261
第19章 認(rèn)證和權(quán)限263
19.1 模型類添加一些信息263
19.2 添加用戶相關(guān)的API264
19.3 將Snippets和用戶關(guān)聯(lián)265
19.4 給API添加只讀用戶字段266
19.5 給視圖添加必要的權(quán)限267
19.6 給可瀏覽API添加登錄功能267
19.7 實(shí)現(xiàn)級別的權(quán)限268
19.8 通過API實(shí)現(xiàn)認(rèn)證269
19.9 認(rèn)證和權(quán)限總結(jié)270
第20章 關(guān)系和超鏈接API271
20.1 為API創(chuàng)建根視圖271
20.2 添加高亮顯示功能的視圖271
20.3 鏈接API272
20.4 確保URL都命名274
20.5 添加分頁功能275
20.6 頁面上瀏覽API275
第21章 ViewSets和Routers276
21.1 使用ViewSets進(jìn)行重構(gòu)276
21.2 顯式將URL和ViewSets綁定起來278
21.3 使用 Routers 自動化URL配置279
21.4 使用視圖、視圖集的利弊279
第5篇 Django系統(tǒng)運(yùn)維
第22章 部署基礎(chǔ)知識283
22.1 部署基礎(chǔ)知識儲備283
22.2 Linux進(jìn)程分析284
22.3 Linux端口分析287
第23章 部署上線290
23.1 Django部署前的準(zhǔn)備290
23.1.1 運(yùn)行開發(fā)服務(wù)器進(jìn)行測試290
23.1.2 安裝Nginx290
23.2 使用uWSGI部署292
23.2.1 安裝uWSGI軟件292
23.2.2 使用 uWSGI運(yùn)行項(xiàng)目292
23.3 使用supervisor管理進(jìn)程293
23.3.1 安裝supervisor軟件包293
23.3.2 supervisor配置293
23.3.3 supervisor使用簡介294
23.4 配置Nginx295
第24章 其他常見功能297
24.1 Django中間件297
24.1.1 工作原理297
24.1.2 激活中間件299
24.1.3 編寫中間件300
24.1.4 其他中間件鉤子301
24.2 Django信號簡介303
24.2.1 信號機(jī)制簡介303
24.2.2 監(jiān)聽信號304
24.2.3 自定義信號306
24.2.4 發(fā)送信號306
24.3 Django緩存框架308
24.3.1 緩存機(jī)制簡介308
24.3.2 設(shè)置緩存308
24.3.3 網(wǎng)站緩存311
24.3.4 視圖緩存311
24.3.5 模板分片緩存312
24.3.6 低層次緩存接口312
24.4 Django日志314
24.4.1 Django日志簡介314
24.4.2 Django日志擴(kuò)展314
24.4.3 Django默認(rèn)日志配置315
24.5 Django發(fā)送郵件316
24.6 Django分頁316