Django是一款高性能的Python Web開發(fā)框架,本書全面講解Django開發(fā)相關的內容。本書共分為24章,主要內容包括Python Web開發(fā)的基礎知識、Django項目實戰(zhàn)、使用Django開發(fā)API、Django系統(tǒng)運維等部分,其中基礎知識部分講解Python基礎知識、各種常用的數(shù)據(jù)結構、正則表達式、HTTP協(xié)議、字符串編碼等;實戰(zhàn)開發(fā)部分講解兩個具體的項目,從功能需求設計、模塊劃分,再到*終的編碼實現(xiàn),手把手教你如何從零打造一個自己的項目;Django系統(tǒng)運維部分講解如何線上部署一個系統(tǒng)、需要掌握的基礎知識、使用的每個組件的作用,讓讀者明白其中的原理,出現(xiàn)問題之后如何排查。
Python簡單易學、上手快速,成為很多程序員喜愛的編程語言。使用Python進行Web應用開發(fā),無疑能夠加快需求實現(xiàn)的速度,快速迭代和驗證產品的原型。有些人可能會有疑問:Python性能不夠好,用來開發(fā)Web是不是不太合適?Python在性能上確實無法和C、Java等語言相比,但在大部分情況下使用Python開發(fā)是可以滿足性能需求的,并且很多時候程序性能不夠好,這不是語言本身的問題,而是架構設計、緩存設計、數(shù)據(jù)結構算法的選用以及開發(fā)人員編程水平等引起的問題?傊褂肞ython語言進行Web開發(fā)有獨特的優(yōu)勢,通常能滿足大部分應用場景的需求。
本書面向想學習Python Web開發(fā)的讀者,分5篇講解基礎知識和實戰(zhàn)。
第1篇是基礎知識,讓讀者對Python語言中各種常用的數(shù)據(jù)結構及其算法有一定的了解,同時介紹常見數(shù)據(jù)結構算法的時間復雜度,讓讀者從學習之初就有性能的意識,為將來編寫出高質量的優(yōu)秀代碼打下基礎。本篇還對開發(fā)過程中會用到的相關知識點(比如正則表達式、HTTP協(xié)議、字符串編碼等)進行講解,讓讀者對Python Web開發(fā)有一個全面的認識。特別是對容易讓初學者困惑的知識,比如絕對路徑和相對路徑的區(qū)別、字符編碼相關的內容,也進行了講解。
第2篇和第3篇是實戰(zhàn)部分,主要講解“資源管理”和“個人博客系統(tǒng)”兩個項目。從功能需求設計、模塊劃分,再到最終的編碼實現(xiàn),手把手教讀者如何從零開始打造自己的項目。
第4篇是使用Django開發(fā)API,通過一個完整的教程,以逐步深入的方式,讓讀者享受使用Django Rest Framework進行API開發(fā)的樂趣。
第5篇是Django系統(tǒng)運維,讓讀者不僅能將服務部署好,而且還能明白各個組件的原理以及它們是如何在一起工作的,從而提高讀者分析問題和解決問題的能力。最后講解Django的一些常用功能,比如中間件、信號系統(tǒng)、緩存框架等,在講解過程中會深入講解它們的工作原理,以及使用中會遇到的一些“坑”。
本書的讀者
如果對Python有一定的了解,想學習Python Web開發(fā),本書會是一個不錯的選擇。
誰不適合讀本書
不太適合一點Python基礎都沒有的人員。另外,如果你已經是Python Web開發(fā)方面的專家,那么這本書對你來說價值應該也不大。
勘誤與反饋
本書所有章節(jié)中的源代碼放在https://github.com/djangobook-cn/book-code上,歡迎讀者從GitHub下載并提出問題(issue),如果下載有問題,可以通過郵箱booksaga@126.com與編者聯(lián)系。
致謝
在編寫本書時,筆者得到了各個方面非常多的建議、幫助和鼓勵,在此深表感謝。
首先,特別感謝武漢大學的譚建揚同學認真細心地測試了書中的示例,指出了很多問題。
感謝研究生實驗室中三位計算機專業(yè)的同學江超、張浩然和楊驍,這三位不僅僅是研究生期間的“戰(zhàn)友”,也在我們編寫本書期間給出了不少建議。
感謝趙軍出色的核對工作,提出了非常多的改進意見。
最后,占用了大量周末時間來寫作,這和妻子lotus的大力支持是分不開的。
涂偉忠
序(一)
序(二)
前言
第1篇 基礎知識
第1章 Django簡介3
1.1 Django基本介紹3
1.2 Django發(fā)布情況4
1.3 Django的MVT架構簡介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章 掌握必要的基礎知識 9
2.1 Web開發(fā)需要什么基礎知識9
2.2 Python語言入門10
2.2.1 Python語言簡介11
2.2.2 執(zhí)行Python代碼的方式11
2.2.3 Python中的縮進格式12
2.2.4 常見的運算符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ù)類型的轉換22
2.2.12 常見數(shù)據(jù)結構操作的時間復雜度23
2.2.13 選擇語句與循環(huán)語句26
2.2.14 關于模塊27
2.2.15 Python中的函數(shù)28
2.2.16 Python中的類30
2.2.17 命令行參數(shù)32
2.2.18 引用和復制一個對象32
2.2.19 常用內置函數(shù)33
2.2.20 常用模塊的功能35
2.3 正則表達式37
2.3.1 正則表達式中的元字符37
2.3.2 正則模塊的核心函數(shù)39
2.3.3 理解貪婪與非貪婪41
2.3.4 正則表達式中的Flag42
2.4 HTTP協(xié)議的基礎知識43
2.5 絕對路徑與相對路徑47
2.6 Python中的字符串編碼48
第3章 Django初步體驗51
3.1 Django的請求和響應51
3.2 Django的模型和admin站點52
3.2.1 新建blog應用53
3.2.2 修改項目設置53
3.2.3 編寫模型代碼54
3.2.4 體驗admin站點55
3.2.5 對admin站點進行簡單定制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篇 實踐學習一:從一個簡單的資源管理做起
第4章 需求的確定和項目排期規(guī)劃75
4.1 產品定位75
4.2 功能需求的確定76
4.3 產品設計的確定77
4.4 產品實現(xiàn)的排期77
第5章 數(shù)據(jù)模型的設計與實現(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 日期時間類字段81
5.2.5 文件類字段82
5.2.6 IP地址類字段82
5.2.7 二進制類字段83
5.3 模型關系字段83
5.3.1 外鍵字段83
5.3.2 多對多字段83
5.3.3 一對一字段84
5.4 字段參數(shù)84
5.5 圖書管理系統(tǒng)模型的實現(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設計92
6.1 URL設計簡介92
6.2 URL反轉簡介94
第7章 頁面和功能的實現(xiàn)96
7.1 基本頁面的實現(xiàn)96
7.2 Django模板語言簡介101
7.3 Django用戶認證和鑒權簡介106
7.4 用戶系統(tǒng)的實現(xiàn)109
7.4.1 用戶注冊功能的實現(xiàn)109
7.4.2 用戶登錄功能的實現(xiàn)115
7.4.3 用戶注銷功能的實現(xiàn)117
7.4.4 修改密碼功能的實現(xiàn)118
7.5 圖書管理相關功能的實現(xiàn)124
7.5.1 圖書添加功能的實現(xiàn)124
7.5.2 圖片上傳功能的實現(xiàn)128
7.5.3 圖書列表功能的實現(xiàn)131
7.5.4 圖書詳情功能的實現(xiàn)136
第3篇 實踐學習二:從博客做起
第8章 個人博客網(wǎng)站的規(guī)劃和設計141
8.1 功能需求的設計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章 基本頁面框架的實現(xiàn)149
10.1 前端頁面框架的實現(xiàn)149
10.2 后端頁面框架的實現(xiàn)154
第11章 用戶系統(tǒng)和認證模塊的實現(xiàn)158
11.1 同步數(shù)據(jù)庫文件158
11.2 用戶登錄功能的實現(xiàn)158
11.3 用戶注銷功能的實現(xiàn)164
第12章 導航欄組件的實現(xiàn)165
12.1 導航欄數(shù)據(jù)模型的設計165
12.2 導航欄前端組件的實現(xiàn)166
12.3 導航欄管理頁面的制作168
第13章 友情鏈接組件的實現(xiàn)180
13.1 友情鏈接數(shù)據(jù)模型的設計180
13.2 友情鏈接前端組件的實現(xiàn)181
13.3 友情鏈接管理頁面的實現(xiàn)182
第14章 “碎碎念”組件的實現(xiàn)191
14.1 “碎碎念”數(shù)據(jù)模型的設計191
14.2 “碎碎念”前端組件的實現(xiàn)192
14.3 “碎碎念”組件管理頁面的實現(xiàn)193
14.4 “碎碎念”前端TimeLine頁面的實現(xiàn)205
第15章 文章組件的實現(xiàn)209
15.1 文章數(shù)據(jù)模型的設計209
15.2 文章分類前端組件的實現(xiàn)210
15.3 文章分類管理的頁面212
15.4 文章管理頁面218
15.5 文章前端組件的實現(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章 請求和響應251
17.1 Request對象251
17.2 Response對象251
17.3 響應狀態(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章 認證和權限263
19.1 模型類添加一些信息263
19.2 添加用戶相關的API264
19.3 將Snippets和用戶關聯(lián)265
19.4 給API添加只讀用戶字段266
19.5 給視圖添加必要的權限267
19.6 給可瀏覽API添加登錄功能267
19.7 實現(xiàn)級別的權限268
19.8 通過API實現(xiàn)認證269
19.9 認證和權限總結270
第20章 關系和超鏈接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進行重構276
21.2 顯式將URL和ViewSets綁定起來278
21.3 使用 Routers 自動化URL配置279
21.4 使用視圖、視圖集的利弊279
第5篇 Django系統(tǒng)運維
第22章 部署基礎知識283
22.1 部署基礎知識儲備283
22.2 Linux進程分析284
22.3 Linux端口分析287
第23章 部署上線290
23.1 Django部署前的準備290
23.1.1 運行開發(fā)服務器進行測試290
23.1.2 安裝Nginx290
23.2 使用uWSGI部署292
23.2.1 安裝uWSGI軟件292
23.2.2 使用 uWSGI運行項目292
23.3 使用supervisor管理進程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 信號機制簡介303
24.2.2 監(jiān)聽信號304
24.2.3 自定義信號306
24.2.4 發(fā)送信號306
24.3 Django緩存框架308
24.3.1 緩存機制簡介308
24.3.2 設置緩存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日志擴展314
24.4.3 Django默認日志配置315
24.5 Django發(fā)送郵件316
24.6 Django分頁316