首 頁(yè)
手機(jī)版

python web開發(fā)實(shí)戰(zhàn) 董偉明 pdf 高清掃描版

一本Python Web開發(fā)的百科全書

python web開發(fā)實(shí)戰(zhàn)是一本Python Web開發(fā)的百科全書,用戶從中可以了解Web工程從開發(fā)到上線的完整流程,作者是豆瓣一線開發(fā)者董偉明。全書按照一個(gè)Web產(chǎn)品從無(wú)到有、從簡(jiǎn)單變復(fù)雜、從基礎(chǔ)到進(jìn)階的過程,多角度、全方位講述了Python Web開發(fā)。內(nèi)容涉及Web框架、測(cè)試、數(shù)據(jù)庫(kù)、消息隊(duì)列、服務(wù)化、持續(xù)集成等,并且對(duì)實(shí)際Web項(xiàng)目中大量實(shí)戰(zhàn)經(jīng)驗(yàn)的總結(jié),有用、實(shí)用,適用于移動(dòng)開發(fā)工程師、Web運(yùn)維、算法/數(shù)據(jù)分析師、有技術(shù)基礎(chǔ)的產(chǎn)品和運(yùn)營(yíng)人員。

內(nèi)容介紹

《python web開發(fā)實(shí)戰(zhàn)》有幾個(gè)特點(diǎn):第一,使用了當(dāng)前主流和前瞻性的技術(shù),如Docker、Ubuntu 16.04 LTS、Cython、CFFI、Py.test、asyncio、IPython 5.0 LTS 等,書中一部分內(nèi)容是在Python 3 下完成的。本書中全部工具都使用當(dāng)前最新版,能保證在相當(dāng)長(zhǎng)的時(shí)間內(nèi)書中的內(nèi)容都不會(huì)過時(shí);第二,筆者在國(guó)內(nèi)應(yīng)用Python 最大的豆瓣網(wǎng)做產(chǎn)品開發(fā),一直在第一線寫代碼,大量例子和經(jīng)驗(yàn)都來(lái)自實(shí)際工作;第三,筆者非常關(guān)注GitHub 和Python 社區(qū),會(huì)第一時(shí)間了解到新的趨勢(shì)和思想,并在書中體現(xiàn)。舉個(gè)例子,代碼檢查工具pep8 已經(jīng)在Guido van Rossum 的要求下改名為pycodestyle了。

筆者和身邊的一些朋友交流過,大多數(shù)人買書來(lái)看,基本上都是看到書中講到了自己一直不太懂的知識(shí)點(diǎn),或者感興趣的話題。因此,在寫作本書時(shí),筆者有意讓每章相對(duì)獨(dú)立。你可以選擇跳著看,當(dāng)然更推薦從第1 章一直看到最后一章,因?yàn)楸緯前凑找粋€(gè)Web 產(chǎn)品從無(wú)到有、從簡(jiǎn)單變復(fù)雜、從基礎(chǔ)到進(jìn)階的過程編排的。

我們先來(lái)大致了解一下這個(gè)過程。

第1 章首先回答兩個(gè)問題:“為什么應(yīng)該選擇Python 作為Web 開發(fā)語(yǔ)言”和“選擇Python 2 還是Python 3”,然后介紹Python 主流的Web 框架,并為如何選擇給出建議。

第2 章幫助讀者跑起來(lái)一個(gè)包含本書所講內(nèi)容的Ubuntu 環(huán)境,讀者可以直接在里面運(yùn)行書中的例子。限于篇幅,如果想要了解環(huán)境搭建的整個(gè)過程以及筆者做這些選擇的理由,可以在本書源代碼項(xiàng)目中的setup.md 文件中獲取。接著將展開介紹Python 的包管理和虛擬環(huán)境相關(guān)的內(nèi)容。通過學(xué)習(xí)這章,讀者對(duì)Python 生態(tài)環(huán)境會(huì)有一定了解。

第3 章先從最簡(jiǎn)單的Flask 例子開始,學(xué)習(xí)一些Flask 相關(guān)的知識(shí),接著學(xué)習(xí)Jinja2和Mako 模板(Mako 在豆瓣的使用非常廣泛),使用MySQL,最后學(xué)以致用,從零開始完成一個(gè)相對(duì)復(fù)雜、在豆瓣有類似功能的文件托管服務(wù)。這個(gè)項(xiàng)目貫穿本書,在之后的章節(jié)中會(huì)對(duì)它繼續(xù)擴(kuò)展。

第4 章這一章是Flask 的進(jìn)階,包含了大量的Flask 擴(kuò)展的使用,還介紹了信號(hào)機(jī)制和Werkzeug 的使用。到這里讀者對(duì)Flask 和Web 開發(fā)已經(jīng)入門,可以根據(jù)自己的想法自己做一些應(yīng)用了。

第5 章現(xiàn)在Web 端應(yīng)用對(duì)交互的要求很高,移動(dòng)應(yīng)用對(duì)后端的API 需求也非常多,需要很好的異構(gòu)通信方式,本章將介紹筆者對(duì)REST 的理解,并提出一些設(shè)計(jì)API 的注意事項(xiàng),最后通過jQuery 和fetch 實(shí)現(xiàn)使用Ajax 的例子,讓讀者了解如何讓前后端通信。

第6 章我們已經(jīng)有了有實(shí)際業(yè)務(wù)邏輯的Web 應(yīng)用,可是用戶還不能訪問,本章將介紹如何選擇應(yīng)用服務(wù)器,用主流的方式在生產(chǎn)環(huán)境中運(yùn)行這個(gè)應(yīng)用。之前應(yīng)用中只是使用了MySQL,在實(shí)際的網(wǎng)站應(yīng)用中,緩存、鍵值對(duì)數(shù)據(jù)庫(kù)、NoSQL 數(shù)據(jù)庫(kù)都是主流的解決方案,本章將一一介紹為什么要用這種技術(shù)以及怎么用。最后作為總結(jié),筆者根據(jù)自己的實(shí)際經(jīng)驗(yàn)繪制一張大型網(wǎng)站的架構(gòu)圖,并詳細(xì)介紹其中模式選擇的理由和經(jīng)驗(yàn)。

第7 章在第6 章,Web 應(yīng)用已經(jīng)運(yùn)行起來(lái),用戶也可以訪問了。但是如下問題也隨之出現(xiàn):

◇ 應(yīng)用依賴多個(gè)服務(wù),如MySQL、Redis 等,這些服務(wù)器在新環(huán)境中的部署是有順序要求的,而且程序要保證一直在運(yùn)行狀態(tài)。

◇ 上線過程不能自動(dòng)化。每次上線都要手動(dòng)執(zhí)行很多命令,既耗時(shí)又容易出錯(cuò)。

◇ 希望能及時(shí)了解和分析服務(wù)器和應(yīng)用的運(yùn)行狀態(tài)。

看完本章相信你就可以知道對(duì)應(yīng)的解決方案了。

第8 章Web 應(yīng)用運(yùn)行良好,可是應(yīng)用的質(zhì)量還沒有保證,如何在上線之前發(fā)現(xiàn)更多的Bug 的需求變得越來(lái)越迫切。本章將介紹主流的測(cè)試方法,并用一個(gè)GitHub 項(xiàng)目實(shí)現(xiàn)持續(xù)集成。

第9 章前面介紹的是Web 應(yīng)用必備的內(nèi)容,從本章開始介紹一些進(jìn)階的內(nèi)容。消息隊(duì)列能帶來(lái)更好的用戶體驗(yàn),本章將介紹豆瓣用到的消息隊(duì)列工具Beanstalkd,以及Celery 推薦的消息隊(duì)列RabbitMQ。如果Web 產(chǎn)品有大量的定時(shí)任務(wù)或者其他異步任務(wù),就可以使用Python 界最知名的Celery 解決,本書將從淺入深讓讀者熟悉Celery 原理和使用方法,最后分享筆者使用的進(jìn)階實(shí)踐。

第10 章現(xiàn)在各個(gè)大公司都在談服務(wù)化,通過這幾年的改造和實(shí)踐,大家都有自己的一套服務(wù)化方案,豆瓣也不例外。本章將告訴讀者為什么要服務(wù)化、豆瓣的服務(wù)化設(shè)計(jì),以及使用開源的ri 改造文件托管服務(wù)。

第11 章筆者在工作中經(jīng)常要給各個(gè)業(yè)務(wù)方提供數(shù)據(jù)支持,如日志統(tǒng)計(jì)分析、數(shù)據(jù)報(bào)表。本章將演示如何使用純Python 代碼在單個(gè)服務(wù)器上利用多核實(shí)現(xiàn)MapReduce功能,還詳細(xì)講解豆瓣工程師都在用的DPark,包含安裝、環(huán)境配置、使用和框架化分析UV & PV;接著將展示幾個(gè)筆者在實(shí)際工作中遇到過的數(shù)據(jù)報(bào)表需求,并講解如何用Pandas 做數(shù)據(jù)可視化。

第12 章這一章將詳細(xì)介紹IPython 和Jupyter Notebook 這兩個(gè)工具,并分享其在豆瓣對(duì)應(yīng)的實(shí)踐。除此之外,還列出筆者日常用來(lái)排錯(cuò)和調(diào)試的工具,包括了解Linux服務(wù)器的相關(guān)情況、性能測(cè)試、分析Python 程序性能瓶頸三個(gè)方面。

第13 章Web 開發(fā)日常也會(huì)有一些并發(fā)編程工作,所以本章以抓取微信公眾號(hào)文章為主線,分別使用多線程、多進(jìn)程、Gevent、Future 和asyncio 這5 種編程方式完成不同階段的爬取任務(wù),也深入地分析在它們之間如何選擇。

第14 章Python 進(jìn)階并不只針對(duì)Web 開發(fā)人員,對(duì)于所有Python 開發(fā)者都有意義。

第15 章介紹筆者日常進(jìn)行Web 開發(fā)的流程和經(jīng)驗(yàn),還著重介紹了多個(gè)代碼質(zhì)量保證工具,以及豆瓣的一些質(zhì)量保證實(shí)踐。最后一節(jié),筆者將談?wù)劥a評(píng)審的意義和實(shí)際經(jīng)驗(yàn)。

章節(jié)目錄

第1 章初識(shí)Python Web 開發(fā)1 
Python Web 開發(fā)介紹1 
為什么應(yīng)該選擇Python 作為Web 開發(fā)語(yǔ)言2 
選擇Python 2 還是Python 3 2 
Web 框架介紹3 
主流Web 框架3 
小眾的Web 框架5 
選擇Web 框架時(shí)應(yīng)遵循的原則5 
第2 章Web 開發(fā)前的準(zhǔn)備7 
搭建一個(gè)能運(yùn)行的虛擬機(jī)環(huán)境7 
安裝VirtualBox 8 
使用Vagrant 安裝8 
使用Docker 安裝10 
包管理和虛擬環(huán)境13 
包管理13 
使用pip 替代easy_install 13 
distribute、distutils 和setuptools 14 
entry_points 15 
插件系統(tǒng)16 
虛擬環(huán)境17 
virtualenv 18 
virtualenv 定制化18 
virtualenvwrapper 21 
virtualenv-burrito 23 
autoenv 24 
進(jìn)階篇:pip 高級(jí)用法25 
命令自動(dòng)補(bǔ)全25 
普通用戶安裝25 
編輯模式25 
使用devapi 作為緩存代理服務(wù)器26 
PYPI 的完全鏡像27 
第3 章Flask Web 開發(fā) 28 
Flask 入門29 
安裝Flask 29 
從Hello World 開始29 
配置管理31 
調(diào)試模式32 
動(dòng)態(tài)URL 規(guī)則32 
自定義URL 轉(zhuǎn)換器33 
HTTP 方法34 
唯一URL 35 
構(gòu)造URL 36 
跳轉(zhuǎn)和重定向36 
響應(yīng)38 
靜態(tài)文件管理40 
即插視圖40 
藍(lán)圖43 
子域名43 
命令行接口44 
模板46 
Jinja2 46 
Mako 52 
使用MySQL 60 
安裝MySQL 和驅(qū)動(dòng)61 
設(shè)置應(yīng)用賬號(hào)和權(quán)限61 
用MySQLdb 寫原生語(yǔ)句62 
事務(wù)提交和回滾63 
ORM 簡(jiǎn)介64 
使用SQLAlchemy 65 
使用ORM 67 
數(shù)據(jù)庫(kù)關(guān)聯(lián)69 
在Flask 中使用SQLAlchemy 71 
記錄慢查詢73 
理解Context 74 
本地線程74 
Werkzeug 的Local 75 
flask.request 76 
使用上下文77 
使用LocalProxy 替代g 80 
從零開始實(shí)現(xiàn)一個(gè)文件托管服務(wù)80 
首頁(yè)84 
重新設(shè)置圖片頁(yè)86 
下載頁(yè)87 
預(yù)覽頁(yè)87 
短鏈接頁(yè)88 
第4 章Flask 開發(fā)進(jìn)階 89 
Flask 的信號(hào)機(jī)制89 
Blinker 的使用89 
Flask 中內(nèi)置的信號(hào)90 
自定義信號(hào)92 
信號(hào)訂閱的高級(jí)用法92 
Flask-Login 中的信號(hào)93 
Flask 的擴(kuò)展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 
數(shù)據(jù)結(jié)構(gòu)120 
功能函數(shù)121 
密碼加密122 
中間件123 
第5 章REST 和Ajax 127 
什么是REST 127 
RESTful API 設(shè)計(jì)指南128 
使用名詞來(lái)表示資源128 
關(guān)注請(qǐng)求頭129 
合理使用請(qǐng)求方法和狀態(tài)碼129 
正確地使用REST 130 
對(duì)輸出的結(jié)果不再包裝131 
不要做出錯(cuò)誤的提示131 
使用嵌套對(duì)象序列化131 
版本132 
URI 失效和遷移132 
信息過濾132 
速度限制133 
緩存133 
并發(fā)控制134 
使用Ajax 135 
第6 章網(wǎng)站架構(gòu). 140 
Python 應(yīng)用服務(wù)器140 
WSGI 協(xié)議141 
常見的WSGI 容器141 
Web 服務(wù)器Nginx 143 
Web 服務(wù)器與應(yīng)用服務(wù)器的區(qū)別143 
為什么要選擇Nginx 143 
安裝Nginx 144 
使用Nginx 部署Flask 應(yīng)用144 
緩存系統(tǒng)Memcached 149 
Libmc 安裝配置150 
使用原生SQL 緩存152 
緩存更新策略157 
Memcached 使用的經(jīng)驗(yàn)157 
鍵值對(duì)數(shù)據(jù)庫(kù)Redis 157 
操作Redis 158 
Redis 應(yīng)用場(chǎng)景159 
分片和集群管理168 
NoSQL 數(shù)據(jù)庫(kù)MongoDB 169 
為什么使用NoSQL 169 
MongoDB 169 
使用pymongo 的例子171 
使用Mongoengine 的例子174 
MongoDB 實(shí)踐經(jīng)驗(yàn)176 
大型網(wǎng)站架構(gòu)經(jīng)驗(yàn)182 
緩存183 
負(fù)載均衡183 
高可用184 
業(yè)務(wù)拆分184 
集群184 
第7 章系統(tǒng)管理 186 
進(jìn)程管理Supervisor 186 
Supervisor 組件187 
配置Supervisor 187 
使用Supervisor 190 
應(yīng)用部署Fabric 193 
Fabric 應(yīng)用接口194 
使用Fabric 管理Flask 應(yīng)用197 
配置管理工具SaltStack 和Ansible 199 
SaltStack 200 
Ansible 207 
使用Psutil 213 
使用Sentry 收集錯(cuò)誤信息215 
安裝配置Sentry 216 
啟動(dòng)Sentry 218 
創(chuàng)建團(tuán)隊(duì)和項(xiàng)目218 
配置SDK 220 
使用StatsD、Graphite 等搭建Web 監(jiān)控223 
配置Graphite 225 
使用StatsD 226 
配置Diamond 227 
發(fā)布指標(biāo)項(xiàng)227 
使用Grafana 228 
使用Kenshin 232 
第8 章測(cè)試和持續(xù)集成 233 
使用unittest 和doctest 做測(cè)試233 
unittest 233 
doctest 236 
使用py.test 和mock 237 
py.test 237 
mock 241 
持續(xù)集成243 
使用Tox 集成248 
第9 章消息隊(duì)列和Celery 250 
使用Beanstalkd 251 
使用Beanstalkc 252 
深入理解RabbitMQ 253 
AMQP 254 
虛擬主機(jī)258 
插件系統(tǒng)258 
通過Web 和REST API 管理RabbitMQ 259 
故障轉(zhuǎn)移262 
使用Celery 262 
Celery 的架構(gòu)263 
Celery 序列化265 
安裝配置Celery 265 
從一個(gè)簡(jiǎn)單的例子開始265 
指定隊(duì)列268 
使用任務(wù)調(diào)度269 
任務(wù)綁定、記錄日志和重試270 
在Flask 應(yīng)用中使用Celery 271 
深入理解Celery 274 
Celery 的依賴274 
任務(wù)調(diào)用277 
信號(hào)系統(tǒng)278 
Worker 管理279 
監(jiān)控和管理Celery 280 
子任務(wù)281 
進(jìn)階篇:Celery 最佳實(shí)踐283 
使用自動(dòng)擴(kuò)展283 
善用遠(yuǎn)程Debug 283 
合理安排任務(wù)周期284 
合理使用隊(duì)列和優(yōu)先級(jí)285 
保證業(yè)務(wù)邏輯的事務(wù)性285 
關(guān)閉你不想要的功能285 
使用閱后即焚模式285 
善用Prefetch 模式286 
善用工作流286 
第10 章服務(wù)化 288 
為什么需要服務(wù)化288 
RPC 框架289 
服務(wù)化帶來(lái)的問題290 
微服務(wù)架構(gòu)290 
使用ri 291 
定義IDL 文件292 
服務(wù)端實(shí)現(xiàn)294 
客戶端實(shí)現(xiàn)297 
PIDL——豆瓣的服務(wù)化實(shí)踐301 
PIDL 架構(gòu)302 
第11 章數(shù)據(jù)處理 305 
使用MapReduce 做日志分析305 
使用MapReduce 305 
使用DPark 309 
分布式文件系統(tǒng)MooseFS 309 
Mesos 310 
配置DPark 環(huán)境311 
從WordCount 開始314 
PV & UV 統(tǒng)計(jì)316 
數(shù)據(jù)報(bào)表320 
發(fā)送帶有樣式和附件的郵件320 
創(chuàng)建xlsx 文件325 
使用Pandas 328 
Pandas 入門329 
讀取MySQL 數(shù)據(jù)庫(kù)332 
和Flask 應(yīng)用集成332 
第12 章幫助工具. 336 
IPython 336 
IPython 交互模式338 
常用的Magic 函數(shù)338 
配置和自定義IPython 341 
IPython 的擴(kuò)展系統(tǒng)342 
使用IPython 調(diào)試復(fù)雜代碼343 
雙進(jìn)程模型344 
并行計(jì)算345 
Jupyter Notebook 347 
Notebook 格式350 
Notebook 格式轉(zhuǎn)換和預(yù)覽351 
為什么使用RequireJS 352 
在Notebook 里使用Echarts 353 
富顯示355 
自定義JavaScript 和CSS 樣式356 
使用nbextension 擴(kuò)展Notebook 358 
在Notebook 上使用并行計(jì)算359 
調(diào)試和Debug 工具360 
了解Linux 服務(wù)器運(yùn)行情況360 
性能測(cè)試366 
Python 程序性能分析369 
性能調(diào)優(yōu)實(shí)踐373 
進(jìn)階篇:定制基于IPython 的交互解釋環(huán)境374 
進(jìn)階篇:豆瓣?yáng)|西的Jupyter Notebook 實(shí)踐376 
第13 章Python 并發(fā)編程383 
使用多線程385 
使用Gevent 392 
使用多進(jìn)程399 
使用Future 406 
使用asyncio 408 
async/await 409 
Future 412 
使用aiohttp 414 
使用隊(duì)列416 
第14 章Python 進(jìn)階 418 
使用標(biāo)準(zhǔn)庫(kù)模塊418 
errno 419 
subprocess 420 
contextlib 421 
glob 424 
operator 424 
functools 426 
collections 428 
Python 語(yǔ)法最佳實(shí)踐432 
命名434 
目錄xxix 
使用join 連接字符串435 
EAFP vs LBYL 435 
定義類的__str__/__repr__ 方法436 
優(yōu)美的Python 437 
從Python 3 移植439 
partialmethod 439 
singledispatch 440 
suppress 442 
redirect_stdout/redirect_stderr 443 
使用CFFI/Cython 編寫Python 擴(kuò)展444 
使用CFFI 444 
使用Cython 447 
進(jìn)階篇:使用PyObjC 發(fā)送通知451 
第15 章Web 開發(fā)項(xiàng)目實(shí)踐455 
Web 項(xiàng)目經(jīng)驗(yàn)總結(jié)455 
開發(fā)流程455 
使用合理的項(xiàng)目結(jié)構(gòu)456 
關(guān)注代碼復(fù)雜度457 
代碼質(zhì)量保證工具457 
Pycodestyle 對(duì)中文縮進(jìn)的處理458 
Flake8 459 
Pylint 460 
其他代碼質(zhì)量保證工具461 
使用AST 做靜態(tài)檢查461 
其他靜態(tài)檢查工具467 
編寫Flake8 擴(kuò)展468 
代碼評(píng)審的意義470 
作為被評(píng)審者471 
作為評(píng)審者472 
評(píng)審的標(biāo)準(zhǔn)473 

使用說(shuō)明

1、下載并解壓,得出pdf文件

2、如果打不開本文件,請(qǐng)務(wù)必下載pdf閱讀器

3、安裝后,在打開解壓得出的pdf文件

4、雙擊進(jìn)行閱讀試讀

收起介紹展開介紹
  • 下載地址
python web開發(fā)實(shí)戰(zhàn) 董偉明 pdf 高清掃描版

有問題? 點(diǎn)此報(bào)錯(cuò)

發(fā)表評(píng)論

0條評(píng)論

熱門推薦