PythonWeb開發實戰
一次真誠的傾訴
業界熱評
為什么寫這本書
誰應該看本書
為什么值得看
本書的特別用法
本書的組織方式和閱讀建議
使用代碼示例
反饋和勘誤
1 初識Python Web開發
Python Web開發介紹
為什么應該選擇Python作為Web開發語言
選擇Python 2還是Python 3
Web框架介紹
主流Web框架
小眾的Web框架
選擇Web框架時應遵循的原則
2 Web開發前的准備
搭建一個能運行的虛擬機環境
安裝VirtualBox
使用Vagrant安裝
使用Docker安裝
包管理和虛擬環境
包管理
使用pip替代easy_install
distribute、distutils和setuptools
entry_points
插件系統
虛擬環境
virtualenv
virtualenv定制化
virtualenvwrapper
virtualenv-burrito
autoenv
進階篇:pip高級用法
命令自動補全
普通用戶安裝
編輯模式
使用devapi作為緩存代理服務器
PYPI的完全鏡像
3 Flask Web開發
Flask入門
安裝Flask
從Hello World開始
配置管理
調試模式
動態URL規則
自定義URL轉換器
HTTP方法
唯一URL
構造URL
跳轉和重定向
響應
靜態文件管理
即插視圖
藍圖
子域名
命令行接口
模板
Jinja2
Mako
使用MySQL
安裝MySQL和驅動
設置應用賬號和權限
用MySQLdb寫原生語句
事務提交和回滾
ORM簡介
使用SQLAlchemy
使用ORM
數據庫關聯
在Flask中使用SQLAlchemy
記錄慢查詢
理解Context
本地線程
Werkzeug的Local
flask.request
使用上下文
使用LocalProxy替代g
從零開始實現一個文件托管服務
首頁
重新設置圖片頁
下載頁
預覽頁
短鏈接頁
4 Flask開發進階
Flask的信號機制
Blinker的使用
Flask中內置的信號
自定義信號
信號訂閱的高級用法
Flask-Login中的信號
Flask的擴展
Flask-Script
Flask-DebugToolbar
Flask-Migrate
Flask-WTF
Flask-Security
Flask-RESTful
Flask-Admin
Flask-Assets
Werkzeug的使用
DebuggedApplication
數據結構
功能函數
密碼加密
中間件
5 REST和Ajax
什么是REST
RESTful API設計指南
使用名詞來表示資源
關注請求頭
合理使用請求方法和狀態碼
正確地使用REST
對輸出的結果不再包裝
不要做出錯誤的提示
使用嵌套對象序列化
版本
URI失效和遷移
信息過濾
速度限制
緩存
並發控制
使用Ajax
6 網站架構
Python應用服務器
WSGI協議
常見的WSGI容器
Web服務器Nginx
Web服務器與應用服務器的區別
為什么要選擇Nginx
安裝Nginx
使用Nginx部署Flask應用
緩存系統Memcached
Libmc安裝配置
使用原生SQL緩存
緩存更新策略
Memcached使用的經驗
鍵值對數據庫Redis
操作Redis
Redis應用場景
分片和集群管理
NoSQL數據庫MongoDB
為什么使用NoSQL
MongoDB
使用pymongo的例子
使用Mongoengine的例子
MongoDB實踐經驗
大型網站架構經驗
緩存
負載均衡
高可用
業務拆分
集群
7 系統管理
進程管理Supervisor
Supervisor組件
配置Supervisor
使用Supervisor
應用部署Fabric
Fabric應用接口
使用Fabric管理Flask應用
配置管理工具SaltStack和Ansible
SaltStack
Ansible
使用Psutil
使用Sentry收集錯誤信息
安裝配置Sentry
啟動Sentry
創建團隊和項目
配置SDK
使用StatsD、Graphite等搭建Web監控
配置Graphite
使用StatsD
配置Diamond
發布指標項
使用Grafana
使用Kenshin
8 測試和持續集成
使用unittest和doctest做測試
unittest
doctest
使用py.test和mock
py.test
mock
持續集成
使用Tox集成
9 消息隊列和Celery
使用Beanstalkd
使用Beanstalkc
深入理解RabbitMQ
AMQP
虛擬主機
插件系統
通過Web和REST API管理RabbitMQ
故障轉移
使用Celery
Celery的架構
Celery序列化
安裝配置Celery
從一個簡單的例子開始
指定隊列
使用任務調度
任務綁定、記錄日志和重試
在Flask應用中使用Celery
深入理解Celery
Celery的依賴
任務調用
信號系統
Worker管理
監控和管理Celery
子任務
進階篇:Celery最佳實踐
使用自動擴展
善用遠程Debug
合理安排任務周期
合理使用隊列和優先級
保證業務邏輯的事務性
關閉你不想要的功能
使用閱后即焚模式
善用Prefetch模式
善用工作流
10 服務化
為什么需要服務化
RPC框架
服務化帶來的問題
微服務架構
使用Thrift
定義IDL文件
服務端實現
客戶端實現
PIDL——豆瓣的服務化實踐
PIDL架構
11 數據處理
使用MapReduce做日志分析
使用MapReduce
使用DPark
分布式文件系統MooseFS
Mesos
配置DPark環境
從WordCount開始
PV&UV統計
數據報表
發送帶有樣式和附件的郵件
創建xlsx文件
使用Pandas
Pandas入門
讀取MySQL數據庫
和Flask應用集成
12 幫助工具
IPython
IPython交互模式
常用的Magic函數
配置和自定義IPython
IPython的擴展系統
使用IPython調試復雜代碼
雙進程模型
並行計算
Jupyter Notebook
Notebook格式
Notebook格式轉換和預覽
為什么使用RequireJS
在Notebook里使用Echarts
富顯示
自定義JavaScript和CSS樣式
使用nbextension擴展Notebook
在Notebook上使用並行計算
調試和Debug工具
了解Linux服務器運行情況
性能測試
Python程序性能分析
性能調優實踐
進階篇:定制基於IPython的交互解釋環境
進階篇:豆瓣東西的Jupyter Notebook實踐
13 Python並發編程
使用多線程
使用Gevent
使用多進程
使用Future
使用asyncio
async/await
Future
使用aiohttp
使用隊列
14 Python進階
使用標准庫模塊
errno
subprocess
contextlib
glob
operator
functools
collections
Python語法最佳實踐
命名
使用join連接字符串
EAFP vs LBYL
定義類的__str__/__repr__方法
優美的Python
從Python 3移植
partialmethod
singledispatch
suppress
redirect_stdout/redirect_stderr
使用CFFI/Cython編寫Python擴展
使用CFFI
使用Cython
進階篇:使用PyObjC發送通知
15 Web開發項目實踐
Web項目經驗總結
開發流程
使用合理的項目結構
關注代碼復雜度
代碼質量保證工具
Pycodestyle對中文縮進的處理
Flake8
Pylint
其他代碼質量保證工具
使用AST做靜態檢查
其他靜態檢查工具
編寫Flake8擴展
代碼評審的意義
作為被評審者
作為評審者
評審的標准
思維導圖
防止博客圖床圖片失效,防止圖片源站外鏈:
http://www.processon.com/chart_image/5e5b4b0de4b02bc3ad6a32af.png)
思維導圖在線編輯鏈接: