Django企業(yè)開發(fā)實戰(zhàn) 高效Python Web框架指南
定 價:99 元
叢書名:圖靈原創(chuàng)
- 作者:胡陽
- 出版時間:2019/2/1
- ISBN:9787115506894
- 出 版 社:人民郵電出版社
- 中圖法分類:TP311.561
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書以從零開發(fā)一個博客系統(tǒng)為例,介紹Django在日常工作中的應用。
本書共分為四部分。*部分介紹編碼之前的準備工作,包括需求分析、Web開發(fā)基礎以及選型時Demo的練習。第二部分開始正式實現(xiàn)需求,介紹了環(huán)境配置、編碼規(guī)范以及合理的項目結(jié)構(gòu)劃分。通過對Django各部分(Model、Form、admin、View)的介紹和使用,完成了一個基礎的博客系統(tǒng)。第三部分在前面的基礎上介紹Django第三方插件的使用,通過引入這些插件進一步增強我們的系統(tǒng)。*后一部分也是正式工作中必不可少的部分,包含調(diào)試代碼、優(yōu)化系統(tǒng)、壓力測試以及自動化等內(nèi)容。
本書適合Python Web開發(fā)人員閱讀。
通過從零開發(fā)到部署完整案例,介紹Python Web框架Django在企業(yè)中的應用
開發(fā)工程師the5fire多年開發(fā)經(jīng)驗總結(jié)
以博客系統(tǒng)為原型,教你以真實的視角搭建自己的生產(chǎn)環(huán)境
胡陽,網(wǎng)名the5fire,前搜狐開發(fā)工程師,現(xiàn)任知乎開發(fā)工程師,負責部分業(yè)務的后端開發(fā)和團隊管理。
具有10年編程經(jīng)驗和寫博客經(jīng)驗,喜歡通過代碼來構(gòu)建一些有價值的東西,也愛好記錄和分享自己的經(jīng)驗。
2011年從Java轉(zhuǎn)到Python后,便不可自拔,主要熟悉的Web框架是Django和Tornado。贊嘆于Python的開發(fā)效率,欣賞Django完備的功能點對實際項目開發(fā)中程序員生產(chǎn)力的提升。
第一部分 初入江湖
第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 本章總結(jié) 12
第2章 框架基礎和技術(shù)選型 13
2.1 Python 2.7與Python 3.x 13
2.1.1 歷史演進 13
2.1.2 現(xiàn)實場景 14
2.1.3 為未來做準備 15
2.1.4 參考資料 15
2.2 WSGIWeb框架基礎 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內(nèi)置功能 25
2.3.3 匹配需求 26
2.3.4 總結(jié) 26
2.4 Tornado框架 26
2.4.1 印象 26
2.4.2 內(nèi)置功能 27
2.4.3 總結(jié) 27
2.5 Django框架 28
2.5.1 新手友好程度 28
2.5.2 內(nèi)置功能 29
2.5.3 總結(jié) 29
2.5.4 參考資料 29
2.6 本章總結(jié) 30
第3章 Django小試牛刀 31
3.1 如何閱讀Django文檔 31
3.1.1 文檔結(jié)構(gòu) 31
3.1.2 總結(jié) 36
3.2 學員管理系統(tǒng)的后臺開發(fā) 37
3.2.1 需求 37
3.2.2 初始化環(huán)境 37
3.2.3 創(chuàng)建項目 38
3.2.4 創(chuàng)建App 38
3.2.5 編寫代碼 39
3.2.6 基礎配置(中文) 41
3.2.7 總結(jié) 41
3.3 學員管理系統(tǒng)的前臺開發(fā) 41
3.3.1 開發(fā)首頁 41
3.3.2 輸出數(shù)據(jù) 42
3.3.3 提交數(shù)據(jù) 44
3.3.4 優(yōu)化數(shù)據(jù),獲取邏輯 47
3.3.5 總結(jié) 47
3.4 學員管理系統(tǒng)的進階部分 48
3.4.1 使用class-based view 48
3.4.2 配置middleware 49
3.4.3 編寫TestCase提升代碼穩(wěn)定性 53
3.4.4 總結(jié) 57
3.5 本章總結(jié) 57
第二部分 正式開發(fā)
第4章 進入開發(fā) 60
4.1 編碼規(guī)范 60
4.1.1 import this(Python之禪) 61
4.1.2 Python編碼規(guī)范 62
4.1.3 Django編碼風格 66
4.1.4 總結(jié) 69
4.1.5 參考資料 69
4.2 虛擬環(huán)境 69
4.2.1 Python 3.3之后自帶venv模塊 69
4.2.2 virtualenv的用法 70
4.2.3 總結(jié) 71
4.2.4 參考資料 71
4.3 合理的項目結(jié)構(gòu) 71
4.3.1 原則 71
4.3.2 通用項目結(jié)構(gòu) 71
4.3.3 Django項目結(jié)構(gòu) 72
4.3.4 總結(jié) 74
4.3.5 參考資料 74
4.4 版本管理與協(xié)作:Git 74
4.4.1 我們的協(xié)作方式 74
4.4.2 Git的基本概念 75
4.4.3 案例演示 76
4.4.4 Git進階 76
4.4.5 總結(jié) 80
4.4.6 參考資料 80
4.5 本章總結(jié) 80
第5章 奠定項目基石:Model 81
5.1 創(chuàng)建項目及配置 81
5.1.1 拆分settings以適應不同的運行環(huán)境 83
5.1.2 配置settings 84
5.1.3 配置Git 85
5.1.4 總結(jié) 86
5.1.5 參考資料 86
5.2 編寫Model層的代碼 86
5.2.1 創(chuàng)建App 87
5.2.2 配置INSTALLED_APPS 92
5.2.3 創(chuàng)建數(shù)據(jù)庫[表] 93
5.2.4 提交代碼 95
5.2.5 總結(jié) 96
5.2.6 參考資料 96
5.3 Model層:字段介紹 96
5.3.1 ORM的基本概念 97
5.3.2 常用字段類型 98
5.3.3 參數(shù) 99
5.3.4 總結(jié) 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 總結(jié) 107
5.4.7 參考資料 107
5.5 本章總結(jié) 107
第6章 開發(fā)管理后臺 108
6.1 配置admin頁面 108
6.1.1 創(chuàng)建blog的管理后臺 109
6.1.2 comment的admin配置 115
6.1.3 config的admin配置 115
6.1.4 詳細配置 116
6.1.5 總結(jié) 117
6.2 根據(jù)需求定制admin 117
6.2.1 定義list頁面 117
6.2.2 編輯頁面的配置 120
6.2.3 自定義靜態(tài)資源引入 122
6.2.4 自定義Form 123
6.2.5 在同一頁面編輯關聯(lián)數(shù)據(jù) 123
6.2.6 定制site 124
6.2.7 admin的權(quán)限邏輯以及SSO登錄 125
6.2.8 總結(jié) 127
6.2.9 參考資料 127
6.3 抽取Admin基類 127
6.3.1 抽象author基類 127
6.3.2 總結(jié) 131
6.4 記錄操作日志 131
6.4.1 使用LogEntry 131
6.4.2 查詢某個對象的變更 133
6.4.3 在admin頁面上查看操作日志 133
6.5 本章總結(jié) 134
第7章 開發(fā)面向用戶的界面 135
7.1 搭建基礎結(jié)構(gòu)與展示文章數(shù)據(jù) 135
7.1.1 分析URL和頁面數(shù)據(jù) 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 配置模板數(shù)據(jù) 142
7.1.8 總結(jié) 144
7.1.9 參考資料 144
7.2 配置頁面通用數(shù)據(jù) 144
7.2.1 完善模板信息 144
7.2.2 重構(gòu)post_list視圖 146
7.2.3 分類信息 147
7.2.4 側(cè)邊欄配置 150
7.2.5 總結(jié) 150
7.3 封裝側(cè)邊欄邏輯 150
7.3.1 調(diào)整模型 151
7.3.2 封裝好SideBar 151
7.3.3 總結(jié) 153
7.4 整理模板代碼 153
7.4.1 抽象基礎模板 153
7.4.2 解耦硬編碼 155
7.4.3 總結(jié) 157
7.5 升級至class-based view 157
7.5.1 函數(shù)與類 157
7.5.2 理解class-based view 157
7.5.3 改造代碼 162
7.5.4 總結(jié) 166
7.5.5 參考資料 166
7.6 Django的View是如何處理請求的 166
7.6.1 class-based view的處理流程 166
7.6.2 總結(jié) 167
7.7 本章總結(jié) 167
第8章 引入前端樣式框架Bootstrap 168
8.1 Bootstrap的基本用法 169
8.1.1 介紹 169
8.1.2 容器和柵格系統(tǒng) 169
8.1.3 簡單的頁面布局 171
8.1.4 總結(jié) 174
8.1.5 參考資料 174
8.2 基于Bootstrap美化頁面 174
8.2.1 增加themes目錄 175
8.2.2 修改模板 176
8.2.3 總結(jié) 180
8.3 配置線上靜態(tài)資源 180
8.3.1 內(nèi)聯(lián)CSS和外聯(lián)CSS 180
8.3.2 Django中的靜態(tài)資源 181
8.3.3 在模板中使用靜態(tài)資源 182
8.3.4 總結(jié) 183
8.3.5 參考資料 183
8.4 本章總結(jié) 183
第9章 完成整個博客系統(tǒng) 184
9.1 增加搜索和作者過濾 184
9.1.1 增加搜索功能 185
9.1.2 增加作者頁面 186
9.1.3 總結(jié) 186
9.2 增加友鏈頁面 186
9.3 增加評論模塊 188
9.3.1 評論提交的方式 188
9.3.2 評論模塊通用化改造 188
9.3.3 實現(xiàn)評論 190
9.3.4 抽象出評論模塊組件和Mixin 195
9.3.5 修改最新評論模板 197
9.3.6 總結(jié) 197
9.3.7 參考資料 197
9.4 配置Markdown編寫文章的支持 197
9.4.1 Markdown第三方庫 197
9.4.2 評論內(nèi)容支持 198
9.4.3 文章正文使用Markdown 198
9.4.4 配置代碼高亮 199
9.4.5 總結(jié) 201
9.4.6 參考資料 201
9.5 增加訪問統(tǒng)計 201
9.5.1 文章訪問統(tǒng)計分析 202
9.5.2 實現(xiàn)文章訪問統(tǒng)計 203
9.5.3 更加合理的方案 206
9.5.4 總結(jié) 206
9.5.5 參考資料 206
9.6 配置RSS和sitemap 206
9.6.1 實現(xiàn)RSS輸出 206
9.6.2 實現(xiàn)sitemap 208
9.6.3 配置RSS和sitemap的urls.py 209
9.6.4 總結(jié) 210
9.6.5 參考資料 210
9.7 本章總結(jié) 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 靜態(tài)資源Media配置 219
10.1.6 自定義過濾器 219
10.1.7 數(shù)據(jù)處理上的差異 221
10.1.8 處理inline 221
10.1.9 site title和site footer的處理 222
10.1.10 去掉Django admin自帶的log配置 222
10.1.11 總結(jié) 222
10.2 使用django-autocomplete-light優(yōu)化性能 222
10.2.1 創(chuàng)造1萬個分類 223
10.2.2 django-autocomplete-light介紹 224
10.2.3 引入插件 224
10.2.4 總結(jié) 226
10.2.5 參考資料 226
10.3 使用django-ckeditor開發(fā)富文本編輯器 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 總結(jié) 234
10.3.7 參考資料 234
10.4 本章總結(jié) 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 總結(jié) 242
11.1.4 參考資料 242
11.2 生成我們的RESTful接口 242
11.2.1 區(qū)分list和detail 242
11.2.2 實現(xiàn)分頁 243
11.2.3 實現(xiàn)Category接口 244
11.2.4 HyperlinkedModelSerializer的使用 246
11.2.5 其他數(shù)據(jù)接口的實現(xiàn) 248
11.2.6 總結(jié) 248
11.2.7 參考資料 248
11.3 本章總結(jié) 249
第四部分 上線前的準備及線上問題排查
第12章 調(diào)試和優(yōu)化 252
12.1 常用的調(diào)試和調(diào)優(yōu)手段 252
12.1.1 調(diào)試手段 252
12.1.2 調(diào)優(yōu)手段 259
12.1.3 總結(jié) 262
12.1.4 參考資料 262
12.2 使用django-debug-toolbar優(yōu)化系統(tǒng) 262
12.2.1 快速配置 262
12.2.2 解讀數(shù)據(jù) 263
12.2.3 配置第三方panel 267
12.2.4 line_profiler 269
12.2.5 總結(jié) 271
12.2.6 參考資料 271
12.3 使用silk 271
12.3.1 快速配置silk 271
12.3.2 配置profiling 273
12.3.3 總結(jié) 273
12.3.4 參考資料 273
12.4 本章總結(jié) 274
第13章 配置MySQL和緩存 275
13.1 配置MySQL 275
13.1.1 使用CONN_MAX_AGE優(yōu)化數(shù)據(jù)庫連接 276
13.1.2 配置正式的settings 277
13.1.3 總結(jié) 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 繼續(xù)演變我們的緩存邏輯 284
13.2.6 Django中的緩存配置 284
13.2.7 配置Redis緩存 286
13.2.8 應用場景和緩存的粒度 287
13.2.9 總結(jié) 287
13.2.10 參考資料 288
13.3 本章總結(jié) 288
第14章 上線前的準備 289
14.1 你的代碼如何為用戶提供服務 290
14.1.1 整體結(jié)構(gòu) 290
14.1.2 項目部署方案 291
14.1.3 系統(tǒng)架構(gòu) 292
14.1.4 總結(jié) 292
14.2 標準化打包和自動化部署 292
14.2.1 配置項目的setup.py 293
14.2.2 sdist與bdist_wheel 295
14.2.3 配置內(nèi)部PyPI服務器 296
14.2.4 自動化部署 298
14.2.5 編寫fabfile配置 299
14.2.6 總結(jié) 303
14.2.7 參考資料 304
14.3 在生產(chǎn)環(huán)境中運行項目 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 靜態(tài)文件處理 315
14.3.9 總結(jié) 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 總結(jié) 320
14.4.5 參考資料 320
14.5 常用的監(jiān)控方式 320
14.5.1 實時監(jiān)控 320
14.5.2 統(tǒng)計分析 321
14.5.3 業(yè)務監(jiān)控(埋點統(tǒng)計) 322
14.5.4 總結(jié) 322
14.6 試試你的系統(tǒng)能抗多少請求 322
14.6.1 計算系統(tǒng)承載量 322
14.6.2 反推一下 324
14.6.3 壓力測試 324
14.6.4 壓測工具介紹 324
14.6.5 完全模擬真實流量 326
14.6.6 緩存加速訪問 327
14.6.7 總結(jié) 328
14.6.8 參考資料 328
14.7 本章總結(jié) 328
第15章 升級到Django 2.0 329
15.1 Django 2.xPython 2時代的逝去 329
15.2 輕松升級到Django 2.0 330
15.2.1 幾個重要的變化 330
15.2.2 第三方庫的升級 331
15.2.3 總結(jié) 331
15.3 本章總結(jié) 332
第16章 最后總結(jié) 333
16.1 技術(shù)棧總結(jié) 333
16.1.1 技術(shù)棧列表 333
16.1.2 總結(jié) 334
16.2 后續(xù)可實踐方向 334
16.2.1 精于一點 335
16.2.2 持續(xù)滾動雪球 335
16.3 Django Web開發(fā)技術(shù)棧清單 336
16.3.1 Python基礎 336
16.3.2 Django基礎 336
16.3.3 Django進階 338
16.3.4 部署相關 338
16.3.5 MySQL數(shù)據(jù)庫 339
16.3.6 Redis 339
16.3.7 常用算法 339
16.3.8 總結(jié) 339
16.4 最后 340
附錄A 使用Fabric 2.0 341
附錄B 使用uWSGI來啟動Django程序 347
附錄C Sentry安裝和配置 350
附錄D 評論驗證碼功能 354
附錄E 通過signal來解耦代碼 358
附錄F 實現(xiàn)文章置頂?shù)膸追N方案 363
附錄G 以騰訊云為例演示部署流程 365