Python Web開發實戰

Python Web開發實戰 pdf epub mobi txt 电子书 下载 2025

董偉明 著
想要找书就要到 求知書站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121297335
版次:1
商品编码:11966737
品牌:Broadview
包装:平装
开本:16开
出版时间:2016-09-01
用纸:胶版纸
字数:616900

具体描述

編輯推薦

適讀人群 :有一定Python基礎的開發者,與Web開發相關聯的其他崗位的人,包含但不限於移動開發工程師、Web運維、算法/數據分析師、有技術基礎的産品和運營人員,也能通過本書瞭解這個領域。
  

  Python Web開發的百科全書,瞭解Web工程從開發到上綫的完整流程
  對實際Web項目中大量實戰經驗的總結,有用、實用
  

內容簡介

  

  《Python Web開發實戰》按照一個Web 産品從無到有、從簡單變復雜、從基礎到進階的過程,多角度、全方位講述瞭Python Web 開發。內容涉及Web 框架、測試、數據庫、消息隊列、服務化、持續集成等,把網站工程的全貌展現在讀者的眼前,從其中可以瞭解Web 工程從開發到上綫的完整流程。另外,作者對當前現在正在流行的技術或工具,如Flask、Celery、Jupyter、Supervisor、
  SaltStack、Pandas 等都有較為詳細的闡述,可作為技術選型時的參考。
  對於Web 開發者、使用Python 語言的運維工程師和運維開發工程師、想提高Python 技能的開發者、想瞭解Python Web 開發的其他開發者,《Python Web開發實戰》都適閤閱讀。
  

作者簡介

    董偉明,豆瓣高級産品開發工程師,主要負責豆瓣讀書、電影、音樂、東西等産品綫。從2011年開始接觸Python, 從運維、運維開發到現在的Web開發,積纍瞭豐富的運維和開發經驗,作者積極參與開源項目,給IPython、pip及Python標準庫等貢獻過代碼。這本書將作者這些年使用Python進行Web開發,對各方麵知識的理解和積纍的經驗進行梳理和總結。

作者個人博客是http://www.dongwm.com,Github地址為https://github.com/dongweiming


精彩書評

  

  偉明把他個人多年 Web 開發的經驗,以及豆瓣十年來數百名優秀工程師在 Web 開發上實踐的積纍,凝聚在瞭這本書裏,多維度、全麵地介紹瞭 Python Web 開發涉及的各種技術。我嚮所有有興趣使用 Python 做 Web 開發的開發者們,強烈推薦此書。
  

  ——洪強寜,愛因互動CTO,前豆瓣首席架構師,前宜信大數據創新中心首席架構師


  

  Web開發本身就是一件很龐雜的事情,模版渲染、API的開發、後端的部署,能在一本書中把這些問題都說清楚並不容易。感謝偉明把豆瓣的一些工程實踐進行瞭整理和總結,這是本書寶貴的一點。
  

  ——清風,SAY CEO,前豆瓣技術總監


  

  偉明將自身在 Web 領域所有方麵的經驗提煉後整理成書,本質上是將幾十個關聯産品的官方文檔,結閤具體工程經驗進行瞭梳理,給齣瞭領域問題解決方案的關鍵思考點和自己的答案,而更加可貴的是,給齣瞭這些思考點的來源,以及形成過程,即給齣瞭解決各種 Web 領域問題的思維模式。
  

  ——Zoom.Quiet(大媽),優視眼動科技 CTO,Python 中文社區創始人之一和管理員


  

  閱讀本書,我深切感受到瞭:全和新。本書的內容涉及瞭Web框架、Ajax的前後端交互、測試、數據庫、數據分析、服務化、部署、係統管理、常用工具等內容,有點百科全書的意味。另外,書中講的許多東西都是現在正在流行的技術或工具,像Flask、Celery、Jupyter、Supervisor、SaltStack、Pandas等。
  

  ——李迎輝,Python開源資深行者,Python-CN郵件列錶創建人,UliPad和Uliweb作者


  

  本書由Python開發開始,循序漸進,把網站工程的全貌展現在讀者的眼前,是瞭解Web工程從開發到上綫完整流程的優秀參考書籍。
  

  ——邢犇(CNBorn) 前豆瓣東西技術負責人


  

  對於很多剛進入Python世界的人,偉明的這本書提供瞭一個非常好的“知識地圖”,涉及瞭Python Web開發的方方麵麵。
  

  ——鬍陽(the5fire),手機搜狐網,任資深開發工程師


  

  這本書從開發環境的搭建、Web 框架的使用,到最後的持續集成和 Python 的進階用法,無一不是他多年的實際工程經驗總結,十分寶貴。
  

  ——姚鋼強(acmerfight),知乎工程師


  

  這本書非常全麵地介紹瞭使用 Python 進行 Web 開發的方方麵麵,既有 Web 框架、緩存、消息隊列、並發處理的場景介紹和技術選型,又有開發流程、質量保證的豐富實戰經驗。
  ——蔡斌(VeryCB),DeepDevelop工程師,前豆瓣條目組技術負責人
  整本書都是作者對實際Web項目中大量實戰經驗的總結,絕非紙上談兵。相信通過閱讀該書可以幫助開發者規避掉大量項目中的“坑”,構建齣更高性能、更穩定的Web項目。
  ——Spawnris 騰訊工程師
  


  


  

目錄

第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
























精彩書摘

推薦序一

作為一名使用Python 作為主力開發語言十多年的老碼農,常常被人要求推薦Python 相關的圖書。經常推薦的都是一些講解Python 語言本身的圖書,而專注在Python 的常見應用領域—— Web 開發上的好書,卻一直是鳳毛麟角。也曾有齣版社的朋友約我寫一本,但我畏懼寫書的艱辛,一直不敢答應。得知偉明的《Python Web 開發實戰》一書即將齣版,欣慰異常,心想偉明寫這個專題實在是再閤適不過,必為佳作。讀完書稿,果不其然。

由於Python 具有開發快速、適閤多人協作、庫豐富、社區成熟等優點,因此是一門非常適閤用於Web 開發的語言。國外的Youtube、Quora ,國內的豆瓣、知乎等,均是以Python 為主要語言開發的。說起Python 的Web 開發,很多人會理解成隻要學會某個Web 框架,能寫代碼查查數據庫,寫模闆渲染齣HTML ,最多再學一下配個Web Server 把服務啓動起來就行,沒什麼內容。多數Python 書裏“Web 開發”的章節一般也就是講這些。但其實要完成生産可用的,能夠應對一定規模訪問量的Web 係統,Web 開發工程師要學會的遠遠不止這些。環境搭建、API 設計、網站架構、係統管理、持續集成、服務化、數據處理、並發處理等,這些都是必要的,而且需要付齣大量的努力纔能掌握的知識。

偉明一直對技術抱有極強的興趣,也有著優秀的動手能力。我對他的第一印象是從他發給豆瓣的求職信開始的:“目前我給glances、Salt、tmux-powerline、supervisor、mongo-pythondriver、circus、graphite-web、Diamond、autopep8、graph-explorer、pip、Celery 等開源項目貢獻過代碼,給Python 標準庫logging 貢獻過代碼。”能夠參與到這麼多一綫開源軟件中的應聘者,確實少見。入職豆瓣後,偉明也錶現齣瞭對Web 開發的深刻理解,很快成為豆瓣多個Web 産品的主力,並幾乎憑一人之力完成瞭CODE 項目的私有依賴剝離和開源。

偉明把他個人多年Web 開發的經驗,以及豆瓣十年來數百名優秀工程師在Web 開發上最佳實踐的積纍,凝聚在瞭《Python Web 開發實戰》這本書裏,多維度、全麵地介紹瞭PythonWeb 開發涉及的各種技術。更難能可貴的是,他還在這本書裏留下瞭非常多關於這些技術的思索:為什麼要使用某個技術?某個需求都有哪些技術可以滿足?如何取捨?這種不僅要知其然,還要知其所以然的態度,是工程師快速成長必備的。

這樣的一本書能夠齣版,對於國內的Python 開發者絕對是個福音。我嚮所有有興趣使用Python 做Web 開發的開發者們,強烈推薦此書。

洪強寜

愛因互動CTO

前豆瓣首席架構師

前宜信大數據創新中心首席架構師


推薦序二

這篇序醞釀瞭好幾天,今天終於動筆寫下瞭第一個字。說實話,很久沒有看到關於Python的好書瞭,尤其是國人自己的原創書。Web 開發本身就是一件很龐雜的事情,模闆渲染、API 的開發、後端的部署,能在一本書中把這些問題都說清楚並不容易。作者偉明與我都齣身豆瓣,雖然沒有同時期在豆瓣工作過,但豆瓣的CODE 係統把我們倆聯係到瞭一起。他是CODE 的三代目,通過CODE 裏一行行Python 代碼,仿佛知道瞭彼此的心意。感謝偉明把豆瓣的一些工程實踐進行瞭整理和總結,這是本書最寶貴的一點。而本書的精華在於他對各種技術使用場景的探討:那些庫誰都會用,但在什麼場景使用,在生産環境中這個庫的錶現到底如何,則不見得有認真的思考。期望將來還可以看到越來越多這樣的圖書,祝此書大賣。

清風

SAY CEO

前豆瓣技術總監


推薦序三

一次真誠的傾訴

自從CPyUG 列錶訂閱人數超過10,000 以後,我就認為中文的Python 學習資料足夠多瞭,而最正確的自學姿勢應該從官方文檔開始。但是,《Python Web 開發實戰》一書又改變瞭我這一偏見。

有道是:“齣版是最好的記憶”,偉明親身證實瞭這一點。作為一名普通的程序員,隻從一個念頭齣發,獨自寫齣瞭500 多頁的技術圖書,這實在是一件令人敬佩的事。凡是寫過書,特彆是寫過技術圖書的人都知道——寫書,難的不是寫什麼,如何寫,而是要耐得住寂寞!在中國生活原本就如此艱辛,無論上學還是工作,周圍永遠有無數同儕在競爭;而寫書幾乎是負收入的經濟行為,特彆是技術圖書。當然,圖書印刷齣來,奉上對傢人的感謝,是一種彆樣的程序員式的浪漫情懷,這種成就感不足為外人道矣。

偉明打動我,讓我為他寫推薦序,就在於他說自己寫書的那個簡單的初衷:讓公司所有人都知道Web 開發究竟是什麼樣的,從而能更好地協同。這其實已經是佛陀流傳經文普度眾生的大情懷瞭!

Python 是如此活躍的一種語言,幾乎伴隨互聯網的發生而創立,又伴隨互聯網的極速發展而繁榮,在Web 開發領域擁有全棧式的技術生態;又因為腳本語言以及其自身語言的人性化設計,通過Web 勾聯到瞭幾乎所有計算機應用領域,這也導緻在特定問題上,Python 總是有一堆解決方案可以選擇,而不像其他語言,隻有一種方案。但是選擇過多,其實也導緻瞭學習成本的增加。

偉明將自身在Web 領域所有方麵的經驗提煉後整理成書,本質上是將幾十個關聯産品的官方文檔,結閤具體工程經驗進行瞭梳理,給齣瞭領域問題最佳方案的關鍵思考點和自己的答案,而更加可貴的是,給齣瞭這些思考點的來源,以及形成過程,即給齣瞭解決各種Web領域問題的思維模式。

從前後幾個版本的書稿也可以看齣,如果沒有這本圖書的艱苦整理,偉明自己也難以形成這種宏觀+ 微觀能同時作用的思考模式。所以,我一直認為:“輸齣是更加殘酷的輸入。”要將紛繁零散的經驗,變成他人可以習得的技能,要組織成敘述閤理、案例得當、結構清晰的圖書,這個過程本身就得對自己的所有積纍進行反復的再學習、解析和增補。其中的工作量遠遠不止這幾百頁書的內容。

更加奇妙的是,在沒有這部書稿前,其實我們並不熟悉,隻是在社區列錶中見過郵箱名而已。但是,有瞭獨有的知識成果後,偉明就有瞭立場,也有瞭動機和理由,邀請我以及類似洪教授/Limodou 這些中國Python 學習者的前輩來評點和審核書稿,獲得直接的聯係,即人脈。

所以,我在鄭重推薦此書的內容之外,更加倡議大傢嚮偉明學習——敢於寫書,通過真誠的技術圖書總結自己的過去,獲得更好的未來,幫助更多的Pythonista。

Zoom.Quiet(大媽)

優視眼動科技CTO

Python 中文社區創始人之一及管理員

OBP 及蟒營工程設計者兼主持人


推薦序四

說起來給《Python Web 開發實戰》一書寫序還真是很突然。2016 年5 月30 日,我突然被拉到瞭一個微信群裏,正覺得納悶的時候,看到群裏Zoom.Quiet 的介紹,纔知道是怎麼迴事。原來《Python Web 開發實戰》已經基本成書,讓大傢看一看。對於本書的作者董偉明,我們沒有在綫下交流過,但是對Python 的熱愛時不時地會把大傢通過某種方式吸引到一起。

這是一本原創圖書,從書名來看是和Web 相關的,而Web 領域正好和我的興趣以及平時的工作相關。作為一個開源Web 框架的開發者,自然對Web 開發的內容比較感興趣,藉由此書正好可以瞭解一下彆人是如何理解以及如何實踐Web 開發的,更何況作者還是豆瓣的工程師,因此對書的內容還是有一些期待。

經過一番閱讀之後,我與偉明交流瞭一些看法,他給予瞭詳細的解釋與說明,我對他的寫作思路也有瞭一些瞭解。對Web 開發的理解其實可以有很多角度,比如,從開發者的角度,這就會更多從具體的功能實現、框架使用來看待;從運維者的角度,會更多地從部署、維護、平颱的角度來理解;從測試及質量的角度,會關心代碼的測試性及代碼審查;從框架開發者的角度,就要瞭解Web 開發涉及哪些領域,每一領域應該用什麼技術與工具來組織,不同領域又如何通過某些框架來有機地結閤在一起。僅憑一本書,想完全滿足所有人的需求是非常睏難的。

閱讀本書,我最大的感受就是:全和新。

全指的是內容覆蓋麵較廣。原本我以為作者會主要講Flask 框架的開發,但其實Flask 框架在本書中的比重並不大,反而是與Web 相關的開發技術的介紹占瞭大部分的篇幅,甚至也包含瞭部署以及Python 本身的一些特性和工具。對此我也有疑問,並嚮作者谘詢。Web 開發的概念其實太大瞭,不同的角度可以有不同的理解。比如我們常說的Web 框架,其實絕大部分都隻涉及展示相關的開發,所以應該更精確地稱之為Web 展示框架或Web 應用框架。但是它很有可能依賴底層的批處理、大數據處理等技術,這些雖然不能算純粹的Web技術,但是卻可以放在Web 開發這一概念下。因此如果把每一塊與Web 開發相關的內容都寫齣來,那麼本書的厚度就可想而知瞭。所以作者是從個人實踐的角度齣發,把他所理解的與Web 開發相關的技術盡可能全地,並且盡可能用更多的實例來講述。之所以我會有“全”這個感受,因為書的內容涉及瞭Web 框架、Ajax 的前後端交互、測試、數據庫、數據分析、服務化、部署、係統管理、常用工具等內容,有點百科全書的意味。

為什麼說“新”,因為書中講的許多東西都是現在正在流行的技術或工具,像Flask、Celery、Jupyter、Supervisor、SaltStack、Pandas 等。其中有些我還是第一次接觸,說明作者平時接觸的內容的確非常豐富,同時也結閤瞭豆瓣的一些具體的實例,這樣會更有藉鑒意義。

全書的難度不是很大,內容廣泛全麵,不過因為篇幅所限,對於前端的技術介紹得不多,有些章節可能描述也不是太細。不過前端技術雖然也算是Web 開發技術,但是與Python 的關係就不那麼緊密瞭,本書畢竟是一本Python 相關的書,所以涉及不多也是正常的。而且許多具體的技術本身內容都很豐富,也絕不是短篇幅可以說清楚的,所以反而有個基礎性的介紹,在需要時自行學習可能更好。因此本書比較適閤對於Web 開發有一定瞭解,但是希望瞭解更多Python Web 開發技術的讀者。

非常感謝作者把自己的經驗分享給大傢。

李迎輝

Python 開源資深行者

Python-CN 郵件列錶創建人

UliPad 和Uliweb 作者


前言/序言

  為什麼寫這本書
  2011 年,我還在一傢互聯網商務公司做一枚小小的運維工程師,那時公司的運維使用的語言主要是Shell。我本來是一個網絡運維,後來在工作中開始接觸Shell,學瞭2 個月之後,感覺可以應付各種需求,雖然程序運行得很慢,但作為一個工作不久且不是IT 相關專業畢業的運維人員,我還是有點沾沾自喜。這種情況隻持續瞭2 個多月,由於公司高速發展,一個新入職的同事打破瞭我的美夢。
  這位新同事入職的第一件工作就是對接各個業務部門的日誌需求。很快就發生瞭一件讓我特彆震撼的事情:同樣的一個日誌需求,我使盡渾身解數用20 行Shell 寫好,運行一次要20分鍾,而這位同事使用Perl 語言的腳本隻用瞭4 行,運行3 分鍾就完成瞭。可以想象我當時的感受。這是我第一次瞭解到選擇正確的工具和方法的重要性。我抑製不住地告訴當時的領導悅鞦:我要學一門運維使用的高級語言!
  悅鞦特彆鄭重地告訴我:一定要學Python。而在2011 年,Python 還隻是一門小眾語言,在BAT 等大公司招聘時僅作為一些職位的附屬要求。迴想至此,非常感謝悅鞦讓我選擇瞭正確的路,否則我現在可能隻能寫關於Perl 語言實踐方麵的書瞭。
  從運維到運維開發,再到豆瓣做産品開發(也就是Web 開發),一路走來我發現,自己走瞭很多彎路,沒有人告訴我什麼是對的,什麼是錯的,該怎麼做選擇。這些都得自己花時間去琢磨和驗證,有時候從Google、StackOverflow 搜索答案,或者在GitHub 直接看源碼獲得靈感甚至正確答案,而涉及職業規劃、該學什麼、怎麼學,這樣的問題除瞭悟性大部分就是靠直覺瞭。
  從買書看基本語法和拷貝彆人的代碼開始學習Python,很早我就開始努力讓代碼符閤PEP8,盡量讓代碼寫得Pythonic(這點很關鍵,未來就不再需要費力改正學習過程中留下的壞習慣瞭)。能用Python 完成日常工作之後,我開始研究和尋找各種Python 高級玩法、黑魔法。這個時候我還是在不斷買書、看書、看之前買的書、看一些技術博客來鞏固和補充自己的知識體係。所謂“技術”中的“術”也就到這裏瞭。
  有瞭“術”還遠遠不夠,還需要有實際的經驗,以及在正確的時機使用正確的工具和方法,這是“技”。“技”是一套分析並解決問題的思路,要想提高“技”,除瞭個人的領悟,最重要的是靠大量的實踐,有時候我們稱之為“造輪子”。關鍵是在造的過程中得思考,比如什麼時候該抽象瞭?這個輪子和競品相比有什麼優勢?技術選型上為什麼要使用XX?
  使用Python 會遇到這樣的問題:什麼時候該用多進程?怎樣提高代碼執行效率?Flask 為什麼流行?曾經遇到一個冷門的Celery 的Bug,當時使用榖歌沒有找到解決方案,甚至解決的思路也沒有,怎麼辦?我開始翻閱PEP 文檔,閱讀優秀開源項目的源碼,還把Python 標準庫模塊中的代碼全部過瞭一遍,收獲頗豐。同時我還會根據工作中遇到的問題,給開源項目和Python 提一些Issue,後來還給它們提交Patch,用自己微薄的能力,讓社區變得好一點點。
  雖然過瞭而立之年,我還在不間斷地更新博客(dongwm.com),希望給其他開發者帶來幫助和靈感。當許艷編輯找到我時,雙方一聊,發現對國內開發者而言實戰類Python Web 開發方麵的書確實不多,我頓時覺得可以以自己多年的工作經驗積纍寫一本,為女兒兩歲生日送上一份不一樣的禮物。作為一個做過運維,現在做後端,卻經常寫前端程序的人來說,我瞭解産品的整個過程,是適閤寫一本這樣的書的。寫這本書的意義還在於,將自己這幾年在使用Python 進行Web 開發中對各方麵知識的理解和積纍的經驗進行梳理和總結,讓更多人受益,同時對自己也是一種成長,也算是對國內的Python 環境做齣個人的貢獻瞭。
  誰應該看本書
  雖然語言隻是工具,但是閱讀本書還是需要有一定的Python 基礎,如果你還沒學過Python,那就先學習一段時間再來閱讀本書,收獲會更多。
  本書主要麵嚮如下4 類人群:
  ? Web 開發者。
  ? 使用Python 語言的運維工程師和運維開發工程師。
  ? 想提高Python 技能的開發者。
  ? 想瞭解Python Web 開發的其他開發者。
  為什麼值得看
  本人閱讀過大量和Python 有關的紙質書和開源圖書,漸漸學到瞭很多控製自己“剁手”買書的方法。我來分析一下為什麼你值得擁有本書。:)
  為什麼要買書來看?我認為不外乎兩個原因:有趣和能學到東西。技術書肯定不會太有趣,那麼最重要的就是能學到東西。市麵上Python 相關的書相當多,但是有些內容陳舊或者不符閤國情,或者並非開發第一綫的人所寫或者翻譯,這樣的書顯然價值就要打一些摺扣;其次是同質化嚴重,偏入門級彆,我個人認為市麵上關於Python 入門或者教授語法知識的書不少,而再深入一點的就很匱乏瞭。
  本書有幾個特點:第一,使用瞭當前主流和前瞻性的技術,如Docker、Ubuntu 16.04 LTS、Cython、CFFI、Py.test、asyncio、IPython 5.0 LTS 等,書中一部分內容是在Python 3 下完成的。本書中全部工具都使用當前最新版,能保證在相當長的時間內書中的內容都不會過時;第二,筆者在國內應用Python 最大的豆瓣網做産品開發,一直在第一綫寫代碼,大量例子和經驗都來自實際工作;第三,筆者非常關注GitHub 和Python 社區,會第一時間瞭解到新的趨勢和思想,並在書中體現。舉個例子,代碼檢查工具pep8 已經在Guido van Rossum 的要求下改名為pycodestyle 瞭。
  叔本華在《人生的智慧》中說過一段話,大意是“人要麼庸俗,要麼孤獨”。筆者認為這個道理在閱讀上麵也成立:讀什麼樣的書,就會逐漸成為什麼樣的人。本書提供瞭很多筆者在其他書中沒有看到過的思考方式和Python 的用法,這也是本書存在的意義。
  本書的特彆用法
  本書中有些效果可能會讓讀者迷惑,在這裏解釋一下。
  1. 交互模式下的效果。本書在交互模式下完成的例子都使用瞭IPython,效果如下:
  In : template.render(name='Xiao Ming')
  Out: u'Hello Xiao Ming!'
  其中In : 是輸入,Out: 是輸齣。
  2. 終端提示符。本書絕大多數的終端提示符沒有使用# 或者$,而使用瞭?。
  本書的組織方式和閱讀建議
  筆者和身邊的一些朋友交流過,大多數人買書來看,基本上都是看到書中講到瞭自己一直不太懂的知識點,或者感興趣的話題。因此,在寫作本書時,筆者有意讓每章相對獨立。你可以選擇跳著看,當然更推薦從第1 章一直看到最後一章,因為本書是按照一個Web 産品從無到有、從簡單變復雜、從基礎到進階的過程編排的。
  我們先來大緻瞭解一下這個過程。
  ? 第1 章首先迴答兩個問題:“為什麼應該選擇Python 作為Web 開發語言”和“選擇Python 2 還是Python 3”,然後介紹Python 主流的Web 框架,並為如何選擇給齣建議。
  ? 第2 章幫助讀者跑起來一個包含本書所講內容的Ubuntu 環境,讀者可以直接在裏麵運行書中的例子。限於篇幅,如果想要瞭解環境搭建的整個過程以及筆者做這些選擇的理由,可以在本書源代碼項目中的setup.md 文件中獲取,短鏈接地址為http://bit.ly/29N4Pqv。接著將展開介紹Python 的包管理和虛擬環境相關的內容。通過學習這章,讀者對Python 生態環境會有一定瞭解。
  ? 第3 章先從最簡單的Flask 例子開始,學習一些Flask 相關的知識,接著學習Jinja2和Mako 模闆(Mako 在豆瓣的使用非常廣泛),使用MySQL,最後學以緻用,從零開始完成一個相對復雜、在豆瓣有類似功能的文件托管服務。這個項目貫穿本書,在之後的章節中會對它繼續擴展。
  ? 第4 章這一章是Flask 的進階,包含瞭大量的Flask 擴展的使用,還介紹瞭信號機製和Werkzeug 的使用。到這裏讀者對Flask 和Web 開發已經入門,可以根據自己的想法自己做一些應用瞭。
  ? 第5 章現在Web 端應用對交互的要求很高,移動應用對後端的API 需求也非常多,需要很好的異構通信方式,本章將介紹筆者對REST 的理解,並提齣一些設計API 的注意事項,最後通過jQuery 和fetch 實現使用Ajax 的例子,讓讀者瞭解如何讓前後端通信。
  ? 第6 章我們已經有瞭有實際業務邏輯的Web 應用,可是用戶還不能訪問,本章將介紹如何選擇應用服務器,用主流的方式在生産環境中運行這個應用。之前應用中隻是使用瞭MySQL,在實際的網站應用中,緩存、鍵值對數據庫、NoSQL 數據庫都是主流的解決方案,本章將一一介紹為什麼要用這種技術以及怎麼用。最後作為總結,筆者根據自己的實際經驗繪製一張大型網站的架構圖,並詳細介紹其中模式選擇的理由和經驗。
  ? 第7 章在第6 章,Web 應用已經運行起來,用戶也可以訪問瞭。但是如下問題也隨之齣現:
  ◇ 應用依賴多個服務,如MySQL、Redis 等,這些服務器在新環境中的部署是有順序要求的,而且程序要保證一直在運行狀態。
  ◇ 上綫過程不能自動化。每次上綫都要手動執行很多命令,既耗時又容易齣錯。
  ◇ 希望能及時瞭解和分析服務器和應用的運行狀態。
  看完本章相信你就可以知道對應的解決方案瞭。
  ? 第8 章Web 應用運行良好,可是應用的質量還沒有保證,如何在上綫之前發現更多的Bug 的需求變得越來越迫切。本章將介紹主流的測試方法,並用一個GitHub 項目實現持續集成。
  ? 第9 章前麵介紹的是Web 應用必備的內容,從本章開始介紹一些進階的內容。消息隊列能帶來更好的用戶體驗,本章將介紹豆瓣用到的消息隊列工具Beanstalkd,以及Celery 推薦的消息隊列RabbitMQ。如果Web 産品有大量的定時任務或者其他異步任務,就可以使用Python 界最知名的Celery 解決,本書將從淺入深讓讀者熟悉Celery 原理和使用方法,最後分享筆者使用的進階實踐。
  ? 第10 章現在各個大公司都在談服務化,通過這幾年的改造和實踐,大傢都有自己的一套服務化方案,豆瓣也不例外。本章將告訴讀者為什麼要服務化、豆瓣的服務化設計,以及使用開源的��ri�� 改造文件托管服務。
  ? 第11 章筆者在工作中經常要給各個業務方提供數據支持,如日誌統計分析、數據報錶。本章將演示如何使用純Python 代碼在單個服務器上利用多核實現MapReduce功能,還詳細講解豆瓣工程師都在用的DPark,包含安裝、環境配置、使用和框架化分析UV & PV;接著將展示幾個筆者在實際工作中遇到過的數據報錶需求,並講解如何用Pandas 做數據可視化。
  ? 第12 章這一章將詳細介紹IPython 和Jupyter Notebook 這兩個工具,並分享其在豆瓣對應的實踐。除此之外,還列齣筆者日常用來排錯和調試的工具,包括瞭解Linux服務器的相關情況、性能測試、分析Python 程序性能瓶頸三個方麵。
  ? 第13 章Web 開發日常也會有一些並發編程工作,所以本章以抓取微信公眾號文章為主綫,分彆使用多綫程、多進程、Gevent、Future 和asyncio 這5 種編程方式完成不同階段的爬取任務,也深入地分析在它們之間如何選擇。
  ? 第14 章Python 進階並不隻針對Web 開發人員,對於所有Python 開發者都有意義。
  前言xvii
  本章介紹瞭一些非常有用的標準庫模塊,也有筆者對《Python 之禪》的理解和總結的一些語法實踐,還講述瞭從Python 3 移植一些有用的功能及編寫Python 擴展等內容。
  ? 第15 章介紹筆者日常進行Web 開發的流程和經驗,還著重介紹瞭多個代碼質量保證工具,以及豆瓣的一些質量保證實踐。最後一節,筆者將談談代碼評審的意義和實際經驗。
  需要說明的是,章與章以及每章內的節與節之間沒有明確的遞進關係,不同産品形態讓Web 産品在其發展的不同階段對技術的選擇和側重點都有所不同。舉個例子,並不是前8章講到的內容在産品中都用到瞭,纔能在應用中引入消息隊列和Celery,要根據實際情況靈活選擇。在産品發展還沒有遇到瓶頸之前就要考慮和嘗試引入對應的解決方案,確保不會影響産品高速發展。
  使用代碼示例
  書中的完整例子的代碼都存放在GitHub 上(https://github.com/dongweiming/web_develop),可以在GitHub 上查看和下載。本書提供的Vagrant 和Docker 環境已經包含瞭這個項目,但可能並不是最新的代碼,如果遇到運行失敗等問題,可以在項目的Issue 頁麵先搜索是否之前有人遇到過同樣問題。如果沒有找到,請嘗試保存本地修改後使用如下命令同步最新的代碼,然後再運行:
  git pull --rebase origin master
  例子文件的名字在書的對應位置會提到,文件存放在對應的章節的子目錄下,比如第3 章第1 節的例子,就會放在chapter3/section1 目錄下。有一些文件是相對於項目根目錄的,比如靜態文件統一存放在static 目錄下,模闆文件統一存放在templates 目錄下。絕大多數模闆文件使用相同的對應章節的約定,比如第4 章第2 節的模闆存放在templates/chapter4/section2目錄下。
  反饋和勘誤
  由於筆者水平有限,加之本書的編寫稍顯倉促,書中難免齣現一些不準確甚至錯誤的理解和不能運行於所有環境的例子,懇請讀者批評指正。如果你在閱讀過程中有任何問題或者發現任何錯誤,都可以去本書源代碼的Issue 頁麵來提問,或者發送郵件到ciici123@gmail.com,我會盡量一一解答。
  本書的全部勘誤將放在項目的errata.md 文件中,地址是http://bit.ly/2a9ep8V,在提交錯誤之前請先看看是不是之前有人已經提過瞭。
  為瞭促進本書讀者的交流和反饋,筆者創建瞭一個關於Python 和Web 開發等主題的社區,地址是http://python-cn.org,關於本書的意見和建議也可以到這裏反饋。這個平颱也能幫助你認識更多閱讀本書、對Python 和Web 開發有興趣和有經驗的人。
  緻謝
  首先感謝給本書做技術評審的洪強寜(hongqn)、大媽(Zoom.Quiet)、清風、李迎輝(limodou)、邢犇(CNBorn)、鬍陽(the5fire)、姚鋼強(acmerfight)、蔡斌(VeryCB)和Spawnris。你們從技術和全書規劃等角度提齣瞭很多有用的意見和建議,讓我受益匪淺。尤其特彆感謝Zoom.Quiet,提供瞭大量建設性的批評意見,這些意見深刻而透徹,對筆者改進和重構內容幫助極大,尤其是對第3 章和第5 章。接下來,感謝寫書過程中豆瓣同事對我的幫助:感謝Guillaume Bouriez 對PIDL 部分的審閱,他以法國人的嚴謹提齣瞭很多有用的建議;感謝潘妙纔讓豆瓣的緩存服務運行良好,産齣瞭非常好的使用緩存的文檔,並對我提齣的緩存問題耐心迴答;感謝田忠博對我搭建DPark 提供瞭很大的幫助,對DPark 的特點的總結源於田老師的內部分享幻燈片。
  感謝電子工業齣版社的編輯許艷和其他同事,本書能在8 個月的時間齣版,離不開你們的敬業精神和一絲不苟的工作態度。
  最後,最應該感謝的是我的父母、妻子和女兒,你們是我生命中最重要的人。尤其感謝我的妻子,在我占用大量周末、晚上的時間進行寫作的時候,能夠給予極大的寬容、支持和理解,對我和女兒悉心照顧並承擔瞭全部的傢務,讓我能夠全身心投入到寫作中。
  Amy,你是我寫作本書最大的動力,這是爸爸送給你2 周歲的特殊禮物。
  2016 年8 月7 日


用户评价

评分

恩还不错,值得推荐哦!!!

评分

书不错还没开始看,先好评吧!

评分

送货很快,东西不错。

评分

很不错,不过好多名词都没听过过……

评分

非常好的书

评分

好好学py!

评分

增加兴趣 了解python的实践用处 适合已经会python的 菜鸟只能用来了解 提升学习语言的兴趣和意志

评分

感皇恩(春事到清明)

评分

青玉案(东风夜放花千树)

相关图书

本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有