Django企業(yè)開(kāi)發(fā)實(shí)戰(zhàn) 高效Python Web框架指南
定 價(jià):99 元
叢書(shū)名:圖靈原創(chuàng)
- 作者:胡陽(yáng)
- 出版時(shí)間:2019/2/1
- ISBN:9787115506894
- 出 版 社:人民郵電出版社
- 中圖法分類:TP311.561
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)以從零開(kāi)發(fā)一個(gè)博客系統(tǒng)為例,介紹Django在日常工作中的應(yīng)用。
本書(shū)共分為四部分。*部分介紹編碼之前的準(zhǔn)備工作,包括需求分析、Web開(kāi)發(fā)基礎(chǔ)以及選型時(shí)Demo的練習(xí)。第二部分開(kāi)始正式實(shí)現(xiàn)需求,介紹了環(huán)境配置、編碼規(guī)范以及合理的項(xiàng)目結(jié)構(gòu)劃分。通過(guò)對(duì)Django各部分(Model、Form、admin、View)的介紹和使用,完成了一個(gè)基礎(chǔ)的博客系統(tǒng)。第三部分在前面的基礎(chǔ)上介紹Django第三方插件的使用,通過(guò)引入這些插件進(jìn)一步增強(qiáng)我們的系統(tǒng)。*后一部分也是正式工作中必不可少的部分,包含調(diào)試代碼、優(yōu)化系統(tǒng)、壓力測(cè)試以及自動(dòng)化等內(nèi)容。
本書(shū)適合Python Web開(kāi)發(fā)人員閱讀。
通過(guò)從零開(kāi)發(fā)到部署完整案例,介紹Python Web框架Django在企業(yè)中的應(yīng)用
開(kāi)發(fā)工程師the5fire多年開(kāi)發(fā)經(jīng)驗(yàn)總結(jié)
以博客系統(tǒng)為原型,教你以真實(shí)的視角搭建自己的生產(chǎn)環(huán)境
胡陽(yáng),網(wǎng)名the5fire,前搜狐開(kāi)發(fā)工程師,現(xiàn)任知乎開(kāi)發(fā)工程師,負(fù)責(zé)部分業(yè)務(wù)的后端開(kāi)發(fā)和團(tuán)隊(duì)管理。
具有10年編程經(jīng)驗(yàn)和寫(xiě)博客經(jīng)驗(yàn),喜歡通過(guò)代碼來(lái)構(gòu)建一些有價(jià)值的東西,也愛(ài)好記錄和分享自己的經(jīng)驗(yàn)。
2011年從Java轉(zhuǎn)到Python后,便不可自拔,主要熟悉的Web框架是Django和Tornado。贊嘆于Python的開(kāi)發(fā)效率,欣賞Django完備的功能點(diǎn)對(duì)實(shí)際項(xiàng)目開(kāi)發(fā)中程序員生產(chǎn)力的提升。
第一部分 初入江湖
第1章 需求 2
1.1 需求文檔 3
1.2 需求評(píng)審 分析 4
1.2.1 博客需求評(píng)審 5
1.2.2 評(píng)審之后 6
1.3 功能分析 6
1.3.1 需求列表 6
1.3.2 功能點(diǎn)梳理 7
1.3.3 模塊劃分 8
1.4 模塊劃分 9
1.4.1 實(shí)體及關(guān)系 9
1.4.2 模塊劃分 10
1.5 本章總結(jié) 12
第2章 框架基礎(chǔ)和技術(shù)選型 13
2.1 Python 2.7與Python 3.x 13
2.1.1 歷史演進(jìn) 13
2.1.2 現(xiàn)實(shí)場(chǎng)景 14
2.1.3 為未來(lái)做準(zhǔn)備 15
2.1.4 參考資料 15
2.2 WSGIWeb框架基礎(chǔ) 15
2.2.1 簡(jiǎn)介 15
2.2.2 簡(jiǎn)單的Web Server 16
2.2.3 多線程版的Web Server 17
2.2.4 簡(jiǎn)單的WSGI Application 20
2.2.5 理解WSGI 22
2.2.6 WSGI中間件和Werkzeug 23
2.2.7 參考資料 24
2.2.8 擴(kuò)展閱讀 24
2.3 Flask框架 24
2.3.1 入門(mén)推薦 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 學(xué)員管理系統(tǒng)的后臺(tái)開(kāi)發(fā) 37
3.2.1 需求 37
3.2.2 初始化環(huán)境 37
3.2.3 創(chuàng)建項(xiàng)目 38
3.2.4 創(chuàng)建App 38
3.2.5 編寫(xiě)代碼 39
3.2.6 基礎(chǔ)配置(中文) 41
3.2.7 總結(jié) 41
3.3 學(xué)員管理系統(tǒng)的前臺(tái)開(kāi)發(fā) 41
3.3.1 開(kāi)發(fā)首頁(yè) 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 學(xué)員管理系統(tǒng)的進(jìn)階部分 48
3.4.1 使用class-based view 48
3.4.2 配置middleware 49
3.4.3 編寫(xiě)TestCase提升代碼穩(wěn)定性 53
3.4.4 總結(jié) 57
3.5 本章總結(jié) 57
第二部分 正式開(kāi)發(fā)
第4章 進(jìn)入開(kāi)發(fā) 60
4.1 編碼規(guī)范 60
4.1.1 import this(Python之禪) 61
4.1.2 Python編碼規(guī)范 62
4.1.3 Django編碼風(fēng)格 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 合理的項(xiàng)目結(jié)構(gòu) 71
4.3.1 原則 71
4.3.2 通用項(xiàng)目結(jié)構(gòu) 71
4.3.3 Django項(xiàng)目結(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進(jìn)階 76
4.4.5 總結(jié) 80
4.4.6 參考資料 80
4.5 本章總結(jié) 80
第5章 奠定項(xiàng)目基石:Model 81
5.1 創(chuàng)建項(xiàng)目及配置 81
5.1.1 拆分settings以適應(yīng)不同的運(yùn)行環(huán)境 83
5.1.2 配置settings 84
5.1.3 配置Git 85
5.1.4 總結(jié) 86
5.1.5 參考資料 86
5.2 編寫(xiě)Model層的代碼 86
5.2.1 創(chuàng)建App 87
5.2.2 配置INSTALLED_APPS 92
5.2.3 創(chuàng)建數(shù)據(jù)庫(kù)[表] 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 進(jìn)階接口 104
5.4.4 常用的字段查詢 105
5.4.5 進(jìn)階查詢 106
5.4.6 總結(jié) 107
5.4.7 參考資料 107
5.5 本章總結(jié) 107
第6章 開(kāi)發(fā)管理后臺(tái) 108
6.1 配置admin頁(yè)面 108
6.1.1 創(chuàng)建blog的管理后臺(tái) 109
6.1.2 comment的admin配置 115
6.1.3 config的admin配置 115
6.1.4 詳細(xì)配置 116
6.1.5 總結(jié) 117
6.2 根據(jù)需求定制admin 117
6.2.1 定義list頁(yè)面 117
6.2.2 編輯頁(yè)面的配置 120
6.2.3 自定義靜態(tài)資源引入 122
6.2.4 自定義Form 123
6.2.5 在同一頁(yè)面編輯關(guān)聯(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 查詢某個(gè)對(duì)象的變更 133
6.4.3 在admin頁(yè)面上查看操作日志 133
6.5 本章總結(jié) 134
第7章 開(kāi)發(fā)面向用戶的界面 135
7.1 搭建基礎(chǔ)結(jié)構(gòu)與展示文章數(shù)據(jù) 135
7.1.1 分析URL和頁(yè)面數(shù)據(jù) 135
7.1.2 編寫(xiě)URL代碼 137
7.1.3 編寫(xiě)View代碼 138
7.1.4 配置模板 139
7.1.5 模板找不到的錯(cuò)誤處理 140
7.1.6 編寫(xiě)正式的View代碼 141
7.1.7 配置模板數(shù)據(jù) 142
7.1.8 總結(jié) 144
7.1.9 參考資料 144
7.2 配置頁(yè)面通用數(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 抽象基礎(chǔ)模板 153
7.4.2 解耦硬編碼 155
7.4.3 總結(jié) 157
7.5 升級(jí)至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是如何處理請(qǐng)求的 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 簡(jiǎn)單的頁(yè)面布局 171
8.1.4 總結(jié) 174
8.1.5 參考資料 174
8.2 基于Bootstrap美化頁(yè)面 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章 完成整個(gè)博客系統(tǒng) 184
9.1 增加搜索和作者過(guò)濾 184
9.1.1 增加搜索功能 185
9.1.2 增加作者頁(yè)面 186
9.1.3 總結(jié) 186
9.2 增加友鏈頁(yè)面 186
9.3 增加評(píng)論模塊 188
9.3.1 評(píng)論提交的方式 188
9.3.2 評(píng)論模塊通用化改造 188
9.3.3 實(shí)現(xiàn)評(píng)論 190
9.3.4 抽象出評(píng)論模塊組件和Mixin 195
9.3.5 修改最新評(píng)論模板 197
9.3.6 總結(jié) 197
9.3.7 參考資料 197
9.4 配置Markdown編寫(xiě)文章的支持 197
9.4.1 Markdown第三方庫(kù) 197
9.4.2 評(píng)論內(nèi)容支持 198
9.4.3 文章正文使用Markdown 198
9.4.4 配置代碼高亮 199
9.4.5 總結(jié) 201
9.4.6 參考資料 201
9.5 增加訪問(wèn)統(tǒng)計(jì) 201
9.5.1 文章訪問(wèn)統(tǒng)計(jì)分析 202
9.5.2 實(shí)現(xiàn)文章訪問(wèn)統(tǒng)計(jì) 203
9.5.3 更加合理的方案 206
9.5.4 總結(jié) 206
9.5.5 參考資料 206
9.6 配置RSS和sitemap 206
9.6.1 實(shí)現(xiàn)RSS輸出 206
9.6.2 實(shí)現(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章 使用第三方插件增強(qiáng)管理后臺(tái) 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 自定義過(guò)濾器 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萬(wàn)個(gè)分類 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開(kāi)發(fā)富文本編輯器 226
10.3.1 基礎(chǔ)配置 227
10.3.2 配置圖片 228
10.3.3 上傳圖片配置 228
10.3.4 自定義存儲(chǔ)以及水印 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 實(shí)現(xiàn)分頁(yè) 243
11.2.3 實(shí)現(xiàn)Category接口 244
11.2.4 HyperlinkedModelSerializer的使用 246
11.2.5 其他數(shù)據(jù)接口的實(shí)現(xiàn) 248
11.2.6 總結(jié) 248
11.2.7 參考資料 248
11.3 本章總結(jié) 249
第四部分 上線前的準(zhǔn)備及線上問(wèn)題排查
第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ù)庫(kù)連接 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 增強(qiáng)緩存裝飾器 280
13.2.4 不引入Redis嗎 283
13.2.5 繼續(xù)演變我們的緩存邏輯 284
13.2.6 Django中的緩存配置 284
13.2.7 配置Redis緩存 286
13.2.8 應(yīng)用場(chǎng)景和緩存的粒度 287
13.2.9 總結(jié) 287
13.2.10 參考資料 288
13.3 本章總結(jié) 288
第14章 上線前的準(zhǔn)備 289
14.1 你的代碼如何為用戶提供服務(wù) 290
14.1.1 整體結(jié)構(gòu) 290
14.1.2 項(xiàng)目部署方案 291
14.1.3 系統(tǒng)架構(gòu) 292
14.1.4 總結(jié) 292
14.2 標(biāo)準(zhǔn)化打包和自動(dòng)化部署 292
14.2.1 配置項(xiàng)目的setup.py 293
14.2.2 sdist與bdist_wheel 295
14.2.3 配置內(nèi)部PyPI服務(wù)器 296
14.2.4 自動(dòng)化部署 298
14.2.5 編寫(xiě)fabfile配置 299
14.2.6 總結(jié) 303
14.2.7 參考資料 304
14.3 在生產(chǎn)環(huán)境中運(yùn)行項(xiàng)目 304
14.3.1 為什么需要使用Gunicorn 304
14.3.2 Gunicorn簡(jiǎn)介 305
14.3.3 使用Gunicorn 306
14.3.4 Supervisor介紹 307
14.3.5 自動(dòng)化部署和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 實(shí)時(shí)監(jiān)控 320
14.5.2 統(tǒng)計(jì)分析 321
14.5.3 業(yè)務(wù)監(jiān)控(埋點(diǎn)統(tǒng)計(jì)) 322
14.5.4 總結(jié) 322
14.6 試試你的系統(tǒng)能抗多少請(qǐng)求 322
14.6.1 計(jì)算系統(tǒng)承載量 322
14.6.2 反推一下 324
14.6.3 壓力測(cè)試 324
14.6.4 壓測(cè)工具介紹 324
14.6.5 完全模擬真實(shí)流量 326
14.6.6 緩存加速訪問(wèn) 327
14.6.7 總結(jié) 328
14.6.8 參考資料 328
14.7 本章總結(jié) 328
第15章 升級(jí)到Django 2.0 329
15.1 Django 2.xPython 2時(shí)代的逝去 329
15.2 輕松升級(jí)到Django 2.0 330
15.2.1 幾個(gè)重要的變化 330
15.2.2 第三方庫(kù)的升級(jí) 331
15.2.3 總結(jié) 331
15.3 本章總結(jié) 332
第16章 最后總結(jié) 333
16.1 技術(shù)?偨Y(jié) 333
16.1.1 技術(shù)棧列表 333
16.1.2 總結(jié) 334
16.2 后續(xù)可實(shí)踐方向 334
16.2.1 精于一點(diǎn) 335
16.2.2 持續(xù)滾動(dòng)雪球 335
16.3 Django Web開(kāi)發(fā)技術(shù)棧清單 336
16.3.1 Python基礎(chǔ) 336
16.3.2 Django基礎(chǔ) 336
16.3.3 Django進(jìn)階 338
16.3.4 部署相關(guān) 338
16.3.5 MySQL數(shù)據(jù)庫(kù) 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來(lái)啟動(dòng)Django程序 347
附錄C Sentry安裝和配置 350
附錄D 評(píng)論驗(yàn)證碼功能 354
附錄E 通過(guò)signal來(lái)解耦代碼 358
附錄F 實(shí)現(xiàn)文章置頂?shù)膸追N方案 363
附錄G 以騰訊云為例演示部署流程 365