內容簡介
本書以從零開發一個部落格系統為例,介紹Django在日常工作中的套用。
本書共分為四部分。第一部分介紹編碼之前的準備工作,包括需求分析、Web開發基礎以及選型時Demo的練習。第二部分開始正式實現需求,介紹了環境配置、編碼規範以及合理的項目結構劃分。通過對Django各部分(Model、Form、admin、View)的介紹和使用,完成了一個基礎的部落格系統。第三部分在前面的基礎上介紹Django第三方外掛程式的使用,通過引入這些外掛程式進一步增強我們的系統。最後一部分也是正式工作中必不可少的部分,包含調試代碼、最佳化系統、壓力測試以及自動化等內容。
本書適合Python Web開發人員閱讀。
圖書目錄
第 一部分 初入江湖
第 1章 需求 2
1.1 需求文檔 3
1.2 需求評審/分析 4
1.2.1 部落格需求評審 5
1.2.2 評審之後 6
1.3 功能分析 6
1.3.1 需求列表 6
1.3.2 功能點梳理 7
1.3.3 模組劃分 8
1.4 模組劃分 9
1.4.1 實體及關係 9
1.4.2 模組劃分 10
1.5 本章總結 12
第 2章 框架基礎和技術選型 13
2.1 Python 2.7與Python 3.x 13
2.1.1 歷史演進 13
2.1.2 現實場景 14
2.1.3 為未來做準備 15
2.1.4 參考資料 15
2.2 WSGI——Web框架基礎 15
2.2.1 簡介 15
2.2.2 簡單的Web Server 16
2.2.3 多執行緒版的Web Server 17
2.2.4 簡單的WSGI Application 20
2.2.5 理解WSGI 22
2.2.6 WSGI中間件和Werkzeug 23
2.2.7 參考資料 24
2.2.8 擴展閱讀 24
2.3 Flask框架 24
2.3.1 入門推薦 25
2.3.2 Flask內置功能 25
2.3.3 匹配需求 26
2.3.4 總結 26
2.4 Tornado框架 26
2.4.1 印象 26
2.4.2 內置功能 27
2.4.3 總結 27
2.5 Django框架 28
2.5.1 新手友好程度 28
2.5.2 內置功能 29
2.5.3 總結 29
2.5.4 參考資料 29
2.6 本章總結 30
第3章 Django小試牛刀 31
3.1 如何閱讀Django文檔 31
3.1.1 文檔結構 31
3.1.2 總結 36
3.2 學員管理系統的後台開發 37
3.2.1 需求 37
3.2.2 初始化環境 37
3.2.3 創建項目 38
3.2.4 創建App 38
3.2.5 編寫代碼 39
3.2.6 基礎配置(中文) 41
3.2.7 總結 41
3.3 學員管理系統的前台開發 41
3.3.1 開發首頁 41
3.3.2 輸出數據 42
3.3.3 提交數據 44
3.3.4 最佳化數據,獲取邏輯 47
3.3.5 總結 47
3.4 學員管理系統的進階部分 48
3.4.1 使用class-based view 48
3.4.2 配置middleware 49
3.4.3 編寫TestCase提升代碼穩定性 53
3.4.4 總結 57
3.5 本章總結 57
第二部分 正式開發
第4章 進入開發 60
4.1 編碼規範 60
4.1.1 import this(Python之禪) 61
4.1.2 Python編碼規範 62
4.1.3 Django編碼風格 66
4.1.4 總結 69
4.1.5 參考資料 69
4.2 虛擬環境 69
4.2.1 Python 3.3之後自帶venv模組 69
4.2.2 virtualenv的用法 70
4.2.3 總結 71
4.2.4 參考資料 71
4.3 合理的項目結構 71
4.3.1 原則 71
4.3.2 通用項目結構 71
4.3.3 Django項目結構 72
4.3.4 總結 74
4.3.5 參考資料 74
4.4 版本管理與協作:Git 74
4.4.1 我們的協作方式 74
4.4.2 Git的基本概念 75
4.4.3 案例演示 76
4.4.4 Git進階 76
4.4.5 總結 80
4.4.6 參考資料 80
4.5 本章總結 80
第5章 奠定項目基石:Model 81
5.1 創建項目及配置 81
5.1.1 拆分settings以適應不同的運行環境 83
5.1.2 配置settings 84
5.1.3 配置Git 85
5.1.4 總結 86
5.1.5 參考資料 86
5.2 編寫Model層的代碼 86
5.2.1 創建App 87
5.2.2 配置INSTALLED_APPS 92
5.2.3 創建資料庫[表] 93
5.2.4 提交代碼 95
5.2.5 總結 96
5.2.6 參考資料 96
5.3 Model層:欄位介紹 96
5.3.1 ORM的基本概念 97
5.3.2 常用欄位類型 98
5.3.3 參數 99
5.3.4 總結 100
5.3.5 參考資料 101
5.4 Model層:QuerySet的使用 101
5.4.1 QuerySet的概念 101
5.4.2 常用的QuerySet接口 102
5.4.3 進階接口 104
5.4.4 常用的欄位查詢 105
5.4.5 進階查詢 106
5.4.6 總結 107
5.4.7 參考資料 107
5.5 本章總結 107
第6章 開發管理後台 108
6.1 配置admin頁面 108
6.1.1 創建blog的管理後台 109
6.1.2 comment的admin配置 115
6.1.3 config的admin配置 115
6.1.4 詳細配置 116
6.1.5 總結 117
6.2 根據需求定製admin 117
6.2.1 定義list頁面 117
6.2.2 編輯頁面的配置 120
6.2.3 自定義靜態資源引入 122
6.2.4 自定義Form 123
6.2.5 在同一頁面編輯關聯數據 123
6.2.6 定製site 124
6.2.7 admin的許可權邏輯以及SSO登錄 125
6.2.8 總結 127
6.2.9 參考資料 127
6.3 抽取Admin基類 127
6.3.1 抽象author基類 127
6.3.2 總結 131
6.4 記錄操作日誌 131
6.4.1 使用LogEntry 131
6.4.2 查詢某個對象的變更 133
6.4.3 在admin頁面上查看操作日誌 133
6.5 本章總結 134
第7章 開發面向用戶的界面 135
7.1 搭建基礎結構與展示文章數據 135
7.1.1 分析URL和頁面數據 135
7.1.2 編寫URL代碼 137
7.1.3 編寫View代碼 138
7.1.4 配置模板 139
7.1.5 模板找不到的錯誤處理 140
7.1.6 編寫正式的View代碼 141
7.1.7 配置模板數據 142
7.1.8 總結 144
7.1.9 參考資料 144
7.2 配置頁面通用數據 144
7.2.1 完善模板信息 144
7.2.2 重構post_list視圖 146
7.2.3 分類信息 147
7.2.4 側邊欄配置 150
7.2.5 總結 150
7.3 封裝側邊欄邏輯 150
7.3.1 調整模型 151
7.3.2 封裝好SideBar 151
7.3.3 總結 153
7.4 整理模板代碼 153
7.4.1 抽象基礎模板 153
7.4.2 解耦硬編碼 155
7.4.3 總結 157
7.5 升級至class-based view 157
7.5.1 函式與類 157
7.5.2 理解class-based view 157
7.5.3 改造代碼 162
7.5.4 總結 166
7.5.5 參考資料 166
7.6 Django的View是如何處理請求的 166
7.6.1 class-based view的處理流程 166
7.6.2 總結 167
7.7 本章總結 167
第8章 引入前端樣式框架Bootstrap 168
8.1 Bootstrap的基本用法 169
8.1.1 介紹 169
8.1.2 容器和柵格系統 169
8.1.3 簡單的頁面布局 171
8.1.4 總結 174
8.1.5 參考資料 174
8.2 基於Bootstrap美化頁面 174
8.2.1 增加themes 175
8.2.2 修改模板 176
8.2.3 總結 180
8.3 配置線上靜態資源 180
8.3.1 內聯CSS和外聯CSS 180
8.3.2 Django中的靜態資源 181
8.3.3 在模板中使用靜態資源 182
8.3.4 總結 183
8.3.5 參考資料 183
8.4 本章總結 183
第9章 完成整個部落格系統 184
9.1 增加搜尋和作者過濾 184
9.1.1 增加搜尋功能 185
9.1.2 增加作者頁面 186
9.1.3 總結 186
9.2 增加友鏈頁面 186
9.3 增加評論模組 188
9.3.1 評論提交的方式 188
9.3.2 評論模組通用化改造 188
9.3.3 實現評論 190
9.3.4 抽象出評論模組組件和Mixin 195
9.3.5 修改最新評論模板 197
9.3.6 總結 197
9.3.7 參考資料 197
9.4 配置Markdown編寫文章的支持 197
9.4.1 Markdown第三方庫 197
9.4.2 評論內容支持 198
9.4.3 文章正文使用Markdown 198
9.4.4 配置代碼高亮 199
9.4.5 總結 201
9.4.6 參考資料 201
9.5 增加訪問統計 201
9.5.1 文章訪問統計分析 202
9.5.2 實現文章訪問統計 203
9.5.3 更加合理的方案 206
9.5.4 總結 206
9.5.5 參考資料 206
9.6 配置RSS和sitemap 206
9.6.1 實現RSS輸出 206
9.6.2 實現sitemap 208
9.6.3 配置RSS和sitemap的urls.py 209
9.6.4 總結 210
9.6.5 參考資料 210
9.7 本章總結 210
第三部分 第三方外掛程式的使用
第 10章 使用第三方外掛程式增強管理後台 214
10.1 xadmin介紹和使用 215
10.1.1 特性 215
10.1.2 安裝最新的xadmin代碼 216
10.1.3 admin替換為xadmin 216
10.1.4 fieldset修改為FieldSet 218
10.1.5 靜態資源Media配置 219
10.1.6 自定義過濾器 219
10.1.7 數據處理上的差異 221
10.1.8 處理inline 221
10.1.9 site title和site footer的處理 222
10.1.10 去掉Django admin自帶的log配置 222
10.1.11 總結 222
10.2 使用django-autocomplete-light最佳化性能 222
10.2.1 創造1萬個分類 223
10.2.2 django-autocomplete-light介紹 224
10.2.3 引入外掛程式 224
10.2.4 總結 226
10.2.5 參考資料 226
10.3 使用django-ckeditor開發富文本編輯器 226
10.3.1 基礎配置 227
10.3.2 配置圖片 228
10.3.3 上傳圖片配置 228
10.3.4 自定義存儲以及水印 229
10.3.5 Markdown和django-ckeditor共存 231
10.3.6 總結 234
10.3.7 參考資料 234
10.4 本章總結 235
第 11章 使用django-rest-framework 236
11.1 接口需求及django-rest-framework介紹 237
11.1.1 快速上手 237
11.1.2 配置API docs 240
11.1.3 總結 242
11.1.4 參考資料 242
11.2 生成我們的RESTful接口 242
11.2.1 區分list和detail 242
11.2.2 實現分頁 243
11.2.3 實現Category接口 244
11.2.4 HyperlinkedModelSerializer的使用 246
11.2.5 其他數據接口的實現 248
11.2.6 總結 248
11.2.7 參考資料 248
11.3 本章總結 249
第四部分 上線前的準備及線上問題排查
第 12章 調試和最佳化 252
12.1 常用的調試和調優手段 252
12.1.1 調試手段 252
12.1.2 調優手段 259
12.1.3 總結 262
12.1.4 參考資料 262
12.2 使用django-debug-toolbar最佳化系統 262
12.2.1 快速配置 262
12.2.2 解讀數據 263
12.2.3 配置第三方panel 267
12.2.4 line_profiler 269
12.2.5 總結 271
12.2.6 參考資料 271
12.3 使用silk 271
12.3.1 快速配置silk 271
12.3.2 配置profiling 273
12.3.3 總結 273
12.3.4 參考資料 273
12.4 本章總結 274
第 13章 配置MySQL和快取 275
13.1 配置MySQL 275
13.1.1 使用CONN_MAX_AGE最佳化資料庫連線 276
13.1.2 配置正式的settings 277
13.1.3 總結 277
13.1.4 參考資料 277
13.2 快取的演化 278
13.2.1 什麼是快取 278
13.2.2 快取裝飾器 279
13.2.3 增強快取裝飾器 280
13.2.4 不引入Redis嗎 283
13.2.5 繼續演變我們的快取邏輯 284
13.2.6 Django中的快取配置 284
13.2.8 套用場景和快取的粒度 287
13.2.9 總結 287
13.2.10 參考資料 288
13.3 本章總結 288
第 14章 上線前的準備 289
14.1 你的代碼如何為用戶提供服務 290
14.1.1 整體結構 290
14.1.2 項目部署方案 291
14.1.3 系統架構 292
14.1.4 總結 292
14.2 標準化打包和自動化部署 292
14.2.1 配置項目的setup.py 293
14.2.2 sdist與bdist_wheel 295
14.2.3 配置內部PyPI伺服器 296
14.2.4 自動化部署 298
14.2.5 編寫fabfile配置 299
14.2.6 總結 303
14.2.7 參考資料 304
14.3 在生產環境中運行項目 304
14.3.1 為什麼需要使用Gunicorn 304
14.3.2 Gunicorn簡介 305
14.3.3 使用Gunicorn 306
14.3.4 Supervisor介紹 307
14.3.5 自動化部署和supervisord 310
14.3.6 setup.py和requirements.txt 311
14.3.7 配置正式settings 312
14.3.8 靜態檔案處理 315
14.3.9 總結 315
14.3.10 參考資料 315
14.4 配置Nginx 315
14.4.1 Nginx介紹 315
14.4.2 為什麼使用Nginx 316
14.4.3 配置Nginx 318
14.4.4 總結 320
14.4.5 參考資料 320
14.5 常用的監控方式 320
14.5.1 實時監控 320
14.5.2 統計分析 321
14.5.3 業務監控(埋點統計) 322
14.5.4 總結 322
14.6 試試你的系統能抗多少請求 322
14.6.1 計算系統承載量 322
14.6.2 反推一下 324
14.6.3 壓力測試 324
14.6.4 壓測工具介紹 324
14.6.5 完全模擬真實流量 326
14.6.6 快取加速訪問 327
14.6.7 總結 328
14.6.8 參考資料 328
14.7 本章總結 328
第 15章 升級到Django 2.0 329
15.1 Django 2.x——Python 2時代的逝去 329
15.2 輕鬆升級到Django 2.0 330
15.2.1 幾個重要的變化 330
15.2.2 第三方庫的升級 331
15.2.3 總結 331
15.3 本章總結 332
第 16章 最後總結 333
16.1 技術棧總結 333
16.1.1 技術棧列表 333
16.1.2 總結 334
16.2 後續可實踐方向 334
16.2.1 精於一點 335
16.2.2 持續滾動雪球 335
16.3 Django Web開發技術棧清單 336
16.3.1 Python基礎 336
16.3.2 Django基礎 336
16.3.3 Django進階 338
16.3.4 部署相關 338
16.3.6 Redis 339
16.3.7 常用算法 339
16.3.8 總結 339
16.4 最後 340
附錄A 使用Fabric 2.0 341
附錄B 使用uWSGI來啟動Django程式 347
附錄C Sentry安裝和配置 350
附錄D 評論驗證碼功能 354
附錄E 通過signal來解耦代碼 358
附錄F 實現文章置頂的幾種方案 363
附錄G 以騰訊云為例演示部署流程 365