TOP
紅利積點抵現金,消費購書更貼心
Python Web開發實戰(簡體書)
滿額折

Python Web開發實戰(簡體書)

商品資訊

人民幣定價:105 元
定價
:NT$ 630 元
優惠價
87548
缺貨無法訂購
商品簡介
作者簡介
名人/編輯推薦
目次
書摘/試閱

商品簡介

Python Web開發的百科全書,瞭解Web工程從開發到上線的完整流程

對實際Web專案中大量實戰經驗的總結,有用、實用

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

作者簡介

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

名人/編輯推薦

偉明把他個人多年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進行Web開發的方方面面,既有Web框架、緩存、訊息佇列、併發處理的場景介紹和技術選型,又有開發流程、品質保證的豐富實戰經驗。
——蔡斌(VeryCB),DeepDevelop工程師,前豆瓣條目組技術負責人

本書從Python 開發開始,循序漸進,把網站工程的全貌展現在讀者的眼前,是瞭解Web 工程從開發到上線完整流程的絕佳參考書籍。同時書中的很多實例取自豆瓣工程開發團隊的實際工作,對於想瞭解豆瓣內部技術實現的朋友,也有很大的參考價值。
邢犇(CNBorn)
前豆瓣東西技術負責人

開券有益,已經很久沒有看到原創的有價值的Python Web 開發書籍了。很多剛進入Python世界的人,想要在Web 開發上有更多的發展,但卻不知如何往下學習。偉明的這本書提供了一個非常好的“知識地圖”,書中涉及了Python Web 開發的方方面面。與此同時,對於那些已經在Web 開發上積累了一些經驗,想要更進一步學習的人來說,這本書也能讓你收穫滿滿。我閱讀完書稿也有了不少收穫。書中涉及的知識點非常多,任何一個點都可以單獨寫成一本書。作者根據自己的經驗積累,提煉出乾貨,略去了基礎的部分,這對於讀者來說也是幸事,不然你可能得抱一個大部頭的書回去了。最後需要說的是,在Web 開發的道路上,這本書是不錯的進階指南。
胡陽(the5fire)
Python 程式師
目前就職於手機搜狐網
任資深開發工程師
負責m.sohu.com 網站的前後端開發和維護

董偉明是我見過的實踐和執行能力超群的工程師。這本書從開發環境的搭建,Web 框架的使用,到最後的持續集成和Python 的進階用法,無一不是他多年的實際工程經驗總結,十分寶貴。如果你剛開始學習Python ,這本書能給你展示Python 的方方面面,讓你可以快速業界熱評xi
進入實際的Web 工程的開發。如果你已經使用Python 多年,這本書也能讓你學習到Python的很多使用技巧。
姚鋼強(acmerfight)
知乎工程師

這本書非常全面地介紹了使用Python 進行Web 開發的方方面面,既有Web 框架、緩存、訊息佇列、併發處理的場景介紹和技術選型,又有開發流程、品質保證的豐富實戰經驗。作者通過非常細緻的Step by Step 教程,一步一步揭開了Web 開發的神秘面紗,不管你有沒有Web 開發基礎,相信都能從這本書中獲益良多。
蔡斌(VeryCB)
DeepDevelop 工程師
前豆瓣條目組技術負責人

為什麼寫這本書
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,用自己微薄的能力,讓社區變得好一點點。
雖然過了而立之年,我還在不間斷地更新博客,希望給其他開發者帶來幫助和靈感。當許豔編輯找到我時,雙方一聊,發現對國內開發者而言實戰類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 文件中獲取。接著將展開介紹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 上,可以在GitHub 上查看和下載。本書提供的Vagrant 和Docker 環境已經包含了這個項目,但可能並不是最新的代碼,如果遇到運行失敗等問題,可以在專案的Issue 頁面先搜索是否之前有人遇到過同樣問題。如果沒有找到,請嘗試保存本地修改後使用如下命令同步最新的代碼,然後再運行:
git pull --rebase origin master
例子檔的名字在書的對應位置會提到,檔存放在對應的章節的子目錄下,比如第3 章第1 節的例子,就會放在chapter3/section1 目錄下。有一些檔是相對於專案根目錄的,比如靜態檔統一存放在static 目錄下,範本檔統一存放在templates 目錄下。絕大多數範本檔使用相同的對應章節的約定

致謝
首先感謝給本書做技術評審的洪強寧(hongqn)、大媽(Zoom.Quiet)、清風、李迎輝(limodou)、邢犇(CNBorn)、胡陽(the5fire)、姚鋼強(acmerfight)、蔡斌(VeryCB)和Spawnris。你們從技術和全書規劃等角度提出了很多有用的意見和建議,讓我受益匪淺。尤其特別感謝Zoom.Quiet,提供了大量建設性的批評意見,這些意見深刻而透徹,對筆者改進和重構內容説明極大,尤其是對第3 章和第5 章。接下來,感謝寫書過程中豆瓣同事對我的幫助:感謝Guillaume Bouriez 對PIDL 部分的審閱,他以法國人的嚴謹提出了很多有用的建議;感謝潘妙才讓豆瓣的緩存服務運行良好,產出了非常好的使用緩存的文檔,並對我提出的緩存問題耐心回答;感謝田忠博對我搭建DPark 提供了很大的幫助,對DPark 的特點的總結源于田老師的內部分享幻燈片。
感謝電子工業出版社的編輯許豔和其他同事,本書能在8 個月的時間出版,離不開你們的敬業精神和一絲不苟的工作態度。
最後,最應該感謝的是我的父母、妻子和女兒,你們是我生命中最重要的人。尤其感謝我的妻子,在我佔用大量週末、晚上的時間進行寫作的時候,能夠給予極大的寬容、支持和理解,對我和女兒悉心照顧並承擔了全部的家務,讓我能夠全身心投入到寫作中。
Amy,你是我寫作本書很大的動力,這是爸爸送給你2 周歲的特殊禮物。

2016 年8 月7 日

目次

1章初識Python Web開發1

Python Web開發介紹1

為什麼應該選擇Python作為Web開發語言2

選擇Python2還是Python32

Web框架介紹3

主流Web框架3

小眾的Web框架5

選擇Web框架時應遵循的原則5

2Web開發前的準備7

搭建一個能運行的虛擬機器環境7

安裝Virtual Box8

使用Vagrant安裝8

使用Docker安裝10

包管理和虛擬環境13

包管理13

使用pip替代easy_install13

distributedistutilssetuptools14

entry_points15

外掛程式系統16

虛擬環境17

virtualenv18

virtualenv定制化18

virtualenvwrapper21

virtualenv—burrito23

autoenv24

進階篇:pip高級用法25

命令自動補全25

普通用戶安裝25

編輯模式25

使用devapi作為緩存代理伺服器26

PYPI的完全鏡像27

3FlaskWeb開發28

Flask入門29

安裝Flask29

Hello World開始29

配置管理31

調試模式32

動態URL規則32

自訂URL轉換器33

HTTP方法34

僅有URL35

構造URL36

跳轉和重定向36

回應38

靜態檔管理40

即插視圖40

藍圖43

子功能變數名稱43

命令列介面44

範本46

Jinja246

Mako52

使用MySQL60

安裝MySQL和驅動61

設置應用帳號和許可權61

MySQLdb寫原生語句62

事務提交和回滾63

ORM簡介64

使用SQLAlchemy65

使用ORM67

資料庫關聯69

Flask中使用SQLAlchemy71

記錄慢查詢73

理解Context74

本地執行緒74

WerkzeugLocal75

flask.request76

使用上下文77

使用LocalProxy替代g80

從零開始實現一個檔託管服務80

首頁84

重新設置圖片頁86

下載頁87

預覽頁87

短連結頁88

4Flask開發進階89

Flask的信號機制89

Blinker的使用89

Flask中內置的信號90

自訂信號92

信號訂閱的高級用法92

Flask—Login中的信號93

Flask的擴展95

Flask—Script95

Flask—DebugToolbar97

Flask—Migrate98

Flask—WTF100

Flask—Security102

Flask—RESTful109

Flask—Admin111

Flask—Assets115

Werkzeug的使用118

DebuggedApplication118

資料結構120

功能函數121

密碼加密122

中介軟體123

5RESTAjax127

什麼是REST127

RESTfulAPI設計指南128

使用名詞來表示資源128

關注請求頭129

合理使用請求方法和狀態碼129

正確地使用REST130

對輸出的結果不再包裝131

不要做出錯誤的提示131

使用嵌套物件序列化131

版本132

URI失效和遷移132

資訊過濾132

速度限制133

緩存133

併發控制134

使用Ajax135

……

6章網站架構140

7章系統管理186

8章測試和持續集成233

9章訊息佇列和Celery250

10章服務化288

11章資料處理305

12章幫助工具336

13Python併發程式設計383

14Python進階418

15Web開發專案實踐455

書摘/試閱

推薦序一
作為一名使用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 作者

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 548
缺貨無法訂購

暢銷榜

客服中心

收藏

會員專區