基本信息
作 譯 者:董偉明
出版時間:2016-09
千 字 數:616
版 次:01-01
頁 數:516
開 本:16開
I S B N :9787121297335
內容簡介
本書按照一個Web 產品從無到有、從簡單變複雜、從基礎到進階的過程,多角度、全方位講述了Python Web開發。內容涉及Web框架、測試、資料庫、訊息佇列、服務化、持續集成等,把網站工程的全貌展現在讀者的眼前,從其中可以了解Web工程從開發到上線的完整流程。另外,作者對當前現在正在流行的技術或工具,如Flask、Celery、Jupyter、Supervisor、SaltStack、Pandas等都有較為詳細的闡述,可作為技術選型時的參考。對於Web 開發者、使用Python 語言的運維工程師和運維開發工程師、想提高Python 技能的開發者、想了解Python Web 開發的其他開發者,本書都適合閱讀。
目錄
第1 章初識Python Web 開發1
Python Web 開發介紹1
為什麼應該選擇Python 作為Web 開發語言2
選擇Python 2 還是Python 3 2
Web 框架介紹3
主流Web 框架3
小眾的Web 框架5
選擇Web 框架時應遵循的原則5
第2 章Web 開發前的準備7
搭建一個能運行的虛擬機環境7
安裝VirtualBox 8
使用Vagrant 安裝8
使用Docker 安裝10
包管理和虛擬環境13
包管理13
使用pip 替代easy_install 13
distribute、distutils 和setuptools 14
entry_points 15
外掛程式系統16
虛擬環境17
virtualenv 18
virtualenv 定製化18
virtualenvwrapper 21
virtualenv-burrito 23
autoenv 24
進階篇:pip 高級用法25
命令自動補全25
普通用戶安裝25
編輯模式25
使用devapi 作為快取代理伺服器26
PYPI 的完全鏡像27
第3 章Flask Web 開發 28
Flask 入門29
安裝Flask 29
從Hello World 開始29
配置管理31
調試模式32
動態URL 規則32
自定義URL 轉換器33
HTTP 方法34
唯一URL 35
構造URL 36
跳轉和重定向36
回響38
靜態檔案管理40
即插視圖40
藍圖43
子域名43
命令行接口44
模板46
Jinja2 46
Mako 52
使用MySQL 60
安裝MySQL 和驅動61
設定套用賬號和許可權61
用MySQLdb 寫原生語句62
事務提交和回滾63
ORM 簡介64
使用SQLAlchemy 65
使用ORM 67
資料庫關聯69
在Flask 中使用SQLAlchemy 71
記錄慢查詢73
理解Context 74
本地執行緒74
Werkzeug 的Local 75
flask.request 76
使用上下文77
使用LocalProxy 替代g 80
從零開始實現一個檔案託管服務80
首頁84
重新設定圖片頁86
下載頁87
預覽頁87
短連結頁88
第4 章Flask 開發進階 89
Flask 的信號機制89
Blinker 的使用89
Flask 中內置的信號90
自定義信號92
信號訂閱的高級用法92
Flask-Login 中的信號93
Flask 的擴展95
Flask-Script 95
Flask-DebugToolbar 97
Flask-Migrate 98
Flask-WTF 100
Flask-Security 102
Flask-RESTful 109
Flask-Admin 111
Flask-Assets 115
Werkzeug 的使用118
DebuggedApplication 118
數據結構120
功能函式121
密碼加密122
中間件123
第5 章REST 和Ajax 127
什麼是REST 127
RESTful API 設計指南128
使用名詞來表示資源128
關注請求頭129
合理使用請求方法和狀態碼129
正確地使用REST 130
對輸出的結果不再包裝131
不要做出錯誤的提示131
使用嵌套對象序列化131
版本132
URI 失效和遷移132
信息過濾132
速度限制133
快取133
並發控制134
使用Ajax 135
第6 章網站架構. 140
Python 套用伺服器140
WSGI 協定141
常見的WSGI 容器141
Web 伺服器Nginx 143
Web 伺服器與套用伺服器的區別143
為什麼要選擇Nginx 143
安裝Nginx 144
使用Nginx 部署Flask 套用144
快取系統Memcached 149
Libmc 安裝配置150
使用原生SQL 快取152
快取更新策略157
Memcached 使用的經驗157
鍵值對資料庫Redis 157
操作Redis 158
Redis 套用場景159
分片和集群管理168
NoSQL 資料庫MongoDB 169
為什麼使用NoSQL 169
MongoDB 169
使用pymongo 的例子171
使用Mongoengine 的例子174
MongoDB 實踐經驗176
大型網站架構經驗182
快取183
負載均衡183
高可用184
業務拆分184
集群184
第7 章系統管理 186
進程管理Supervisor 186
Supervisor 組件187
配置Supervisor 187
使用Supervisor 190
套用部署Fabric 193
Fabric 套用接口194
使用Fabric 管理Flask 套用197
配置管理工具SaltStack 和Ansible 199
SaltStack 200
Ansible 207
使用Psutil 213
使用Sentry 收集錯誤信息215
安裝配置Sentry 216
啟動Sentry 218
創建團隊和項目218
配置SDK 220
使用StatsD、Graphite 等搭建Web 監控223
配置Graphite 225
使用StatsD 226
配置Diamond 227
發布指標項227
使用Grafana 228
使用Kenshin 232
第8 章測試和持續集成 233
使用unittest 和doctest 做測試233
unittest 233
doctest 236
使用py.test 和mock 237
py.test 237
mock 241
持續集成243
使用Tox 集成248
第9 章訊息佇列和Celery 250
使用Beanstalkd 251
使用Beanstalkc 252
深入理解RabbitMQ 253
AMQP 254
虛擬主機258
外掛程式系統258
通過Web 和REST API 管理RabbitMQ 259
故障轉移262
使用Celery 262
Celery 的架構263
Celery 序列化265
安裝配置Celery 265
從一個簡單的例子開始265
指定佇列268
使用任務調度269
任務綁定、記錄日誌和重試270
在Flask 套用中使用Celery 271
深入理解Celery 274
Celery 的依賴274
任務調用277
信號系統278
Worker 管理279
監控和管理Celery 280
子任務281
進階篇:Celery 最佳實踐283
使用自動擴展283
善用遠程Debug 283
合理安排任務周期284
合理使用佇列和優先權285
保證業務邏輯的事務性285
關閉你不想要的功能285
使用閱後即焚模式285
善用Prefetch 模式286
善用工作流286
第10 章服務化 288
為什麼需要服務化288
RPC 框架289
服務化帶來的問題290
微服務架構290
使用ri 291
定義IDL 檔案292
服務端實現294
客戶端實現297
PIDL——豆瓣的服務化實踐301
PIDL 架構302
第11 章數據處理 305
使用MapReduce 做日誌分析305
使用MapReduce 305
使用DPark 309
分散式檔案系統MooseFS 309
Mesos 310
配置DPark 環境311
從WordCount 開始314
PV & UV 統計316
數據報表320
傳送帶有樣式和附屬檔案的郵件320
創建xlsx 檔案325
使用Pandas 328
Pandas 入門329
讀取MySQL 資料庫332
和Flask 套用集成332
第12 章幫助工具. 336
IPython 336
IPython 互動模式338
常用的Magic 函式338
配置和自定義IPython 341
IPython 的擴展系統342
使用IPython 調試複雜代碼343
雙進程模型344
並行計算345
Jupyter Notebook 347
Notebook 格式350
Notebook 格式轉換和預覽351
為什麼使用RequireJS 352
在Notebook 里使用Echarts 353
富顯示355
自定義JavaScript 和CSS 樣式356
使用nbextension 擴展Notebook 358
在Notebook 上使用並行計算359
調試和Debug 工具360
了解Linux 伺服器運行情況360
性能測試366
Python 程式性能分析369
性能調優實踐373
進階篇:定製基於IPython 的互動解釋環境374
進階篇:豆瓣東西的Jupyter Notebook 實踐376
第13 章Python 並發編程383
使用多執行緒385
使用Gevent 392
使用多進程399
使用Future 406
使用asyncio 408
async/await 409
Future 412
使用aiohttp 414
使用佇列416
第14 章Python 進階 418
使用標準庫模組418
errno 419
subprocess 420
contextlib 421
glob 424
operator 424
functools 426
collections 428
Python 語法最佳實踐432
命名434
目錄xxix
使用join 連線字元串435
EAFP vs LBYL 435
定義類的__str__/__repr__ 方法436
優美的Python 437
從Python 3 移植439
partialmethod 439
singledispatch 440
suppress 442
redirect_stdout/redirect_stderr 443
使用CFFI/Cython 編寫Python 擴展444
使用CFFI 444
使用Cython 447
進階篇:使用PyObjC 傳送通知451
第15 章Web 開發項目實踐455
Web 項目經驗總結455
開發流程455
使用合理的項目結構456
關注代碼複雜度457
代碼質量保證工具457
Pycodestyle 對中文縮進的處理458
Flake8 459
Pylint 460
其他代碼質量保證工具461
使用AST 做靜態檢查461
其他靜態檢查工具467
編寫Flake8 擴展468
代碼評審的意義470
作為被評審者471
作為評審者472
評審的標準473
作者簡介
董偉明,豆瓣高級產品開發工程師,主要負責豆瓣讀書、電影、音樂、東西等產品線。從2011年開始接觸Python, 從運維、運維開發到現在的Web開發,積累了豐富的運維和開發經驗,作者積極參與開源項目,給IPython、pip及Python標準庫等貢獻過代碼。這本書將作者這些年使用Python進行Web開發,對各方面知識的理解和積累的經驗進行梳理和總結。