內容介紹
作者從Python的環境搭建開始講起,介紹了Web套用開發方法、任務管理,以及評審、測試及高效部署、伺服器調試等內容,儘可能網羅了Python開發流程中的方方面面。在這裡,Python僅僅是一個載體,很多知識點在非Python下也適用,這也是本書最大的特色所在。
本書適合有一定基礎的Python開發者,以及使用PHP或Ruby進行網頁開發的讀者閱讀。
作者介紹
BePROUD股份有限公司
BePROUD是一家專注於Python開發的公司,因雲集了眾多行業精英而聞名於日本國內。多年來的軟體開發碩果纍纍,其精湛的技術水平,得到了客戶及業界人士的認可和好評。
譯者介紹
盛榮
曾就職於愛立信中國,長期從事通信、IT設備的研發、測試等相關工作。喜愛腳本語言,特別是Python。希望將Python等腳本語言更好地套用於自動化測試等領域之中。
目錄
第一部分 使用Python開發
01 開始使用Python 2
01.01 Python環境搭建 2
01.01.01 安裝apt軟體包 2
01.01.02 easy_install 與pip 3
01.01.03 安裝virtualenv 4
01.01.04 使用不同版本的Python 9
01.02 Mercurial環境搭建 12
01.02.01 Mercurial的簡介 12
01.02.02 Mercurial的安裝 12
01.02.03 代碼庫的建立 13
01.02.04 檔案的操作 14
01.03 編輯器與方便的開發工具 17
01.03.01 編輯器 17
01.03.02 Python開發小貼士 19
01.04 本章小結 22
02 開發Web應用程式 23
02.01 了解Web應用程式 23
02.01.01 什麼是Web應用程式 23
02.01.02 Web應用程式與桌面應用程式的不同 24
02.01.03 Web應用程式的機制 24
02.02 Web應用程式開發的事前準備 27
02.02.01 關於Flask 27
02.02.02 Flask的安裝 27
02.03 Web應用程式的開發流程 28
02.04 明確需要開發的目標系統 28
02.04.01 留言簿應用程式的需求 28
02.04.02 明確必要的功能 29
02.04.03 明確頁面的表現形式 29
02.05 頁面設計 29
02.05.01 頁面設計草圖 30
02.05.02 設計HTML和CSS 30
02.06 後台功能的開發 35
02.06.01 保存評論數據 35
02.06.02 取出保存過的評論數據 36
02.06.03 使用模板引擎顯示頁面 37
02.06.04 準備評論的目標URL地址 39
02.06.05 調整模板輸出 40
02.07 功能驗證 41
02.08 本章小結 42
第二部分 團隊開發的周期和流程
03 準備團隊開發環境 46
03.01 在公共伺服器上建立用戶、設定許可權 46
03.01.01 用戶與用戶組的建立 46
03.01.02 sudoers 46
03.01.03 virtualenv 47
03.02 問題跟蹤系統 47
03.02.01 Trac 48
03.02.02 安裝Trac 48
03.03 版本控制系統 51
03.04 有利於團隊開發的工具 52
03.04.01 Skype 52
03.04.02 DropBox 53
03.04.03 Google Docs 54
03.05 本章小結 54
04 編寫開發文檔的準備 55
04.01 編寫項目開發文檔 55
04.01.01 在寫文檔時,我們不想做什麼工作 55
04.01.02 願意在什麼樣的條件下編寫文檔 57
04.02 Sphinx的基礎與安裝 58
04.02.01 Sphinx的安裝 58
04.02.02 reStructuredText入門 60
04.02.03 使用Sphinx編寫結構化文檔的流程 61
04.02.04 Sphinx的擴展 66
04.03 引入Sphinx後解決的問題與新的問題 67
04.03.01 採用純文本,可使用一般的編輯器來寫文檔 67
04.03.02 內容與形式分離,不關注文檔形式而專注於內容的編寫 68
04.03.03 不僅僅是PDF,通過一個源可以輸出多種格式 71
04.03.04 將文檔分割成多個檔案編輯,進行結構化處理 72
04.03.05 通過Mercurial進行簡單的版本控制 73
04.03.06 將API參考手冊和對應程式協同管理 73
04.03.07 一般文檔可通過Web瀏覽器共享 76
04.03.08 Sphinx引入後仍需探討的問題 76
04.04 文檔集合的創建與利用 77
04.04.01 什麼是文檔集合 78
04.04.02 項目中必不可少的文檔列表 78
04.04.03 面向團隊領導、經理 79
04.04.04 面向設計人員 80
04.04.05 面向開發人員 80
04.04.06 面向用戶 81
04.05 本章小結 81
05 問題跟蹤與評審 82
05.01 任務管理與ticket驅動開發 82
05.01.01 開始寫代碼……在這之前還是先創建一個ticket 82
05.01.02 創建和ticket編號一致的分支 83
05.01.03 讓版本發布與分支對應 84
05.01.04 分支的合併 84
05.01.05 整理ticket信息 86
05.01.06 ticket 的分割 86
05.02 評審 87
05.02.01 為什麼需要評審 87
05.02.02 作為被評審人:代碼評審篇 87
05.02.03 作為被評審人:工作評審篇 88
05.02.04 作為評審人:代碼評審篇 89
05.02.05 作為評審人:工作評審篇 92
05.03 本章小結 92
06 模組的分割設計與單元測試 93
06.01 模組分割設計方法 93
06.01.01 功能設計 93
06.01.02 Web應用程式的構成組件 94
06.01.03 組件設計 96
06.01.04 模組與包 97
06.02 測試 99
06.02.01 測試的種類 99
06.02.02 編寫單元測試 101
06.02.03 從單元測試中去除環境依賴 109
06.02.04 使用WebTest進行功能測試 114
06.03 從測試來改善設計 118
06.04 邁向測試執行的自動化 120
06.04.01 測試環境的自動生成 120
06.04.02 可以反覆執行的測試環境 121
06.05 本章小結 121
07 打包與自動建立環境 122
07.01 原始碼打包與發布自動化 123
07.01.01 打包 123
07.01.02 程式包的自動化發布 127
07.01.03 向PyPI註冊程式包 128
07.01.04 向PyPI上傳程式包 128
07.01.05 書寫程式包的使用說明 129
07.02 安裝與環境關聯庫的介紹 131
07.02.01 Distribute 132
07.02.02 pip 133
07.02.03 virtualenv 134
07.03 套用環境自動構建所必備的功能與工具 135
07.03.01 準備獨立的Python環境 135
07.03.02 Python庫的程式包化以及標準安裝 136
07.03.03 鎖定套用環境的程式包版本 136
07.03.04 整個環境可以離線安裝 136
07.03.05 重建環境時可以復用快取 137
07.03.06 使用編譯好的二進制模組 138
07.03.07 當PyPI宕機或高峰時,有備用伺服器 138
07.04 自動套用環境構建 140
07.04.01 開始 140
07.04.02 構建初始環境 140
07.04.03 包含原始碼的套用環境 141
07.04.04 在部署環境中的離線安裝 143
07.04.05 安裝部署需要二進制編譯的程式包 144
07.05 公司內部共享專用庫 144
07.05.01 在多個項目間共享代碼的方法 145
07.05.02 自動建立非公開程式包的套用環境 149
07.06 本章小結 152
08 使用Mercurial管理原始碼 153
08.01 Mercurial的代碼庫管理與配置 153
08.01.01 在伺服器上設定UNIX用戶與用戶組 153
08.01.02 設定umask值 154
08.01.03 創建代碼庫 154
08.01.04 配置hgrc 155
08.01.05 使用配置後的代碼庫 155
08.01.06 使用hgweb作為簡易的中央代碼庫 155
08.02 靈活使用鉤子功能 156
08.02.01 鉤子功能的設定方法 157
08.02.02 使用鉤子腳本 157
08.02.03 鉤子事件 157
08.02.04 鉤子執行的時機 159
08.02.05 編寫鉤子腳本 161
08.03 分支操作 164
08.04 分支間的合併 165
08.04.01 沒有衝突的合併 165
08.04.02 用文本編輯器消除合併衝突 167
08.04.03 合併的模式與衝突的種類 169
08.04.04 使用圖形界面合併的方法 170
08.05 GUI客戶端 173
08.05.01 GUI客戶端的介紹 173
08.05.02 GUI客戶端的優點 176
08.05.03 GUI客戶端的缺點 179
08.05.04 hgwebcommit 180
08.06 考慮實際運用而產生的BP Mercurial W/F 182
08.06.01 概要 182
08.06.02 背景 183
08.06.03 代碼庫的構成 183
08.06.04 原始碼提交 184
08.06.05 設計師的提交操作 186
08.06.06 分支的合併 187
08.06.07 集成分支 188
08.07 本章小結 189
09 使用Jenkins持續集成 192
09.01 什麼是持續集成 192
09.01.01 關於持續集成 192
09.01.02 關於Jenkins 194
09.02 Jenkins的安裝 194
09.02.01 安裝Java 194
09.02.02 安裝Jenkins主體程式 194
09.02.03 本章用到的Jenkins外掛程式 195
09.03 執行測試代碼 195
09.03.01 簡單測試代碼的示例 195
09.03.02 註冊作業 196
09.03.03 作業執行成功與失敗 198
09.04 測試結果通過報表輸出 199
09.04.01 安裝nose 199
09.04.02 調用nosetests命令 199
09.04.03 為使用nose修改Jenkins配置 200
09.05 展示代碼覆蓋率報告 201
09.05.01 coverage的安裝 201
09.05.02 coverage命令的概述:分為“統計”和“輸出”兩步 201
09.05.03 通過nose執行coverage 201
09.05.04 讀取代碼覆蓋率的報告 202
09.06 執行Django測試 204
09.06.01 Django模組的安裝 204
09.06.02 Django的安裝 204
09.06.03 樣本代碼 205
09.06.04 Jenkins的創建 208
09.06.05 “構建後處理”部分的配置 210
09.07 通過Jenkins構建文檔 212
09.07.01 Sphinx的安裝 212
09.07.02 配置Jenkins作業的註冊信息 212
09.07.03 Sphinx的構建在出現告警時作業失敗 213
09.07.04 查閱編譯成果 214
09.07.05 使用Task Scanner Plugin管理TODO信息 215
09.07.06 Task Scanner Plugin的配置示例 216
09.08 進一步靈活使用Jenkins 216
09.08.01 便捷的功能 216
09.08.02 進一步的改善 218
09.09 本章小結 219
第三部分 服務的公開
10 自動構建和部署環境 222
10.01 安裝與配置具有依賴關係的程式包 222
10.01.01 創建操作用戶 223
10.01.02 列舉必要的程式包 224
10.01.03 封閉環境的安裝 226
10.01.04 應用程式的配置 228
10.01.05 環境驗證 231
10.02 整理部署的操作步驟 231
10.02.01 賦予代碼庫訪問許可權 232
10.02.02 克隆原始碼庫 232
10.02.03 部署方法總結 232
10.03 使用Fabric將操作步驟自動化 233
10.03.01 什麼是Fabric 233
10.03.02 安裝與環境配置 233
10.03.03 編寫簡單的腳本 234
10.03.04 參考步驟說明書進行自動化 234
10.03.05 驗證執行行為 238
10.03.06 添加注釋 238
10.04 本章小結 239
11 改善應用程式的性能 240
11.01 Web應用程式的性能 240
11.01.01 Web套用遭遇大量請求時會如何 240
11.01.02 高負載時的對策 241
11.02 留言簿應用程式的性能測試 242
11.02.01 什麼是應用程式的性能 242
11.02.02 ApacheBench的安裝 242
11.02.03 使用ApacheBench檢測性能 242
11.03 關於gunicorn 245
11.03.01 gunicorn的安裝 245
11.03.02 使用gunicorn運行應用程式 245
11.04 關於nginx 247
11.04.01 nginx的安裝 248
11.04.02 nginx的性能測試 248
11.05 使用nginx和gunicorn共同承載應用程式 250
11.05.01 gunicorn的配置 250
11.05.02 nginx的配置 251
11.05.03 測定nginx+gunicorn組合的性能 251
11.05.04 性能的比較 252
11.06 本章小結 253
12 Google App Engine 254
12.01 關於App Engine 254
12.01.01 什麼是App Engine 254
12.01.02 App Engine的優點 255
12.01.03 App Engine平台的局限性 255
12.01.04 使用案例 256
12.02 App Engine的主要功能 256
12.02.01 數據存儲 256
12.02.02 自動擴展與負載分散 257
12.02.03 在App Engine中的Python運行環境 259
12.03 App Engine的開發準備工作與步驟確認 260
12.03.01 獲取賬號並開發程式 260
12.03.02 創建SDK 263
12.03.03 開發簡單的應用程式 264
12.03.04 部署 266
12.04 在App Engine中開發Flask的應用程式 267
12.04.01 使已有的應用程式運行 267
12.04.02 部署並運行 271
12.04.03 管理終端 272
12.05 調整:改善應用程式性能 274
12.05.01 根據Appstats進行性能測試 274
12.05.02 使用多執行緒來處理 276
12.06 性能調優:減少計費額 277
12.06.01 與計費有關的配置 277
12.06.02 計費表 277
12.06.03 節約實例的數量 279
12.06.04 減少數據存儲的操作 280
12.07 測試 282
12.07.01 在測試代碼內使用API 282
12.07.02 測試的執行 284
12.07.03 在真實伺服器上測試 285
12.08 本章小結 285
第四部分 加速開發的技術
13 測試是不可分割的一部分 288
13.01 認清測試現狀 288
13.02 在開發的各個階段引入測試工作 289
13.02.01 文檔的測試(文檔評審) 289
13.02.02 編寫測試的方法(輸入與輸出) 292
13.02.03 測試的執行與測試階段的輪換(把什麼工作做到什麼程度) 295
13.03 本章小結:對測試不要抱有恐懼 298
14 便捷地使用Django 300
14.01 什麼是Django 300
14.01.01 Django的安裝 300
14.01.02 Django的架構 300
14.01.03 Django的文檔 304
14.02 讓資料庫的集成更加方便 304
14.02.01 什麼是資料庫的集成 304
14.02.02 默認情況下Django能做什麼 304
14.02.03 對,就是它,使用South就能夠做到 305
14.03 使用fixture replacement使測試更加方便 312
14.03.01 什麼是測試配置器(fixture) 312
14.03.02 默認測試配置器的不便之處 314
14.03.03 使用factory_boy 315
14.04 使調試更加方便 318
14.05 本章小結 324
15 使用方便的Python模組 325
15.01 簡化日期計算的模組 325
15.01.01 日期計算的複雜之處 325
15.01.02 引入dateutil 327
15.02 簡化模型映射的模組 329
15.02.01 必須進行模型映射的理由 329
15.02.02 映射規則的構造與復用 330
15.02.03 導入bpmappers模組 333
15.02.04 與Django的聯動 335
15.02.05 編寫JSON API 336
15.03 判斷字元的編碼 337
15.04 RSS閱讀訂閱的解析模組 339
15.04.01 導入feedparser模組 339
15.04.02 使用feedparser解析RSS閱讀訂閱信息 339
15.05 圖像處理模組 340
15.05.01 安裝PIL模組 340
15.05.02 轉換圖像格式 341
15.05.03 調整圖像的尺寸 342
15.05.04 截取圖像的某個部分 344
15.05.05 圖像的過濾處理 345
15.06 數據的加密處理模組 346
15.06.01 PyCrypto的安裝 346
15.06.02 共同密鑰的加密與解密 347
15.06.03 公開密鑰方式的加密與解密 347
15.07 調用Twitter的API模組 351
15.07.01 導入tweepy模組 351
15.07.02 應用程式的登錄域和Consumer Key的獲取 351
15.07.03 獲得Access Token 354
15.07.04 調用TwitterAPI 354
15.07.05 開發使用Twitter認證的應用程式 356
15.08 本章小結 361
附錄A 建立VirtualBox環境 362
附錄B 建立作業系統環境 366