PythonWeb開發實戰


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擴展

代碼評審的意義

作為被評審者
作為評審者
評審的標准

思維導圖

PythonWeb開發實戰

防止博客圖床圖片失效,防止圖片源站外鏈:

http://www.processon.com/chart_image/5e5b4b0de4b02bc3ad6a32af.png)

思維導圖在線編輯鏈接:

https://www.processon.com/view/5e5b4b0de4b02bc3ad6a32ac


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM