官术网_书友最值得收藏!

前言

根據2018年和2019年Python開發者報告,Flask是目前最流行的Python Web框架。自2010年開源以來,受到了越來越多Python開發者的喜歡。截至2020年6月,它在GitHub上已有51000個Star,2300多位Watcher,是目前GitHub中Star數最多的Python Web框架。

Flask的logo

附注

Flask的圖標雖然看起來很像辣椒,但其實它是角狀的容器(powder horn)。

Flask僅保留了Web框架的核心,其他的功能都交給擴展實現。如果沒有合適的擴展,你甚至可以自己編寫。Flask不會替你做決定,也不會限制你的選擇。它足夠輕量,你可以只用5行就編寫出一個最簡單的Web程序,但并不簡陋,它能夠適應各類項目的開發。

因為Flask的靈活性,越來越多的公司選擇Flask作為Web框架,甚至開始從Django遷移到Flask。使用Flask的公司在國外有Netflix、Reddit、Twilio、Mailgun等,在國內則有豆瓣、果殼、下廚房等,這說明Flask能經受大型項目的挑戰,能夠適應各種需求。下圖列出了部分使用Flask的公司。

附注

你可以在Stack Share上查看完整的使用Flask的公司列表(https://stackshare.io/flask)。

使用Flask的公司

在國內,越來越多的Python程序員開始關注和學習Flask。對于國內的程序員來說,相關書籍僅有一兩本,內容上也過于陳舊和單薄,希望本書可以填補這一空白。本書提供了學習Flask的完整路徑,從基礎內容到進階實踐,再到源碼分析。同時也安排了豐富的示例程序,讓讀者可以通過親自實踐來更快地掌握Flask開發。

Flask自2010年開源以來在Google上的搜索趨勢

參考來源:Google Trends(https://trends.google.com/trends/explore?date=2010-04-01%202018-04-01&q=%2Fm%2F0dgs72v)。

目標讀者

在技術層面,本書適合所有Python程序員(了解Python即可)閱讀,包括已經學習過其他Python Web框架(比如Django)的讀者和沒有接觸過Web框架的讀者。

在難度水平層面,本書適合新手以及中級讀者閱讀。新手會在這里學到Flask的基礎內容,并且通過豐富、完善的實例學習Flask開發的方方面面;中級讀者則可以通過閱讀和實踐進階內容來進一步提高Flask開發能力。

綜上所述,本書主要適合以下幾類讀者:

? 了解Python基本語法,想要自己動手做網站的編程愛好者。

? 熟悉Python,想要從事Python Web開發的后端工程師、運維工程師和爬蟲工程師。

? 想要從Django等其他Python Web框架轉向Flask的Python工程師。

本書主要特點

本書主要有三個顯著的特點:

(1)內容全面

本書內容覆蓋了Flask Web開發的完整路徑:從基礎知識的學習,到不同類型和復雜程度的程序的編寫,再到代碼的測試優化以及Flask源碼分析;從基礎的內容管理,到用戶認證和權限管理,再到Flask與Java Script的數據交互、Web API的編寫以及Web Socket的應用等。

(2)實踐豐富

本書包含大量代碼片段,并附帶多個完整可運行的示例程序。在本書第一部分的第2~6章均分別提供一個示例程序;第二部分則會通過介紹5個比較完善的Flask項目來講解各個方面的進階知識;在第三部分還會通過一個真實的擴展來講解Flask擴展開發。通過將各類知識融入實際的項目開發實踐中,可以讓你更直觀地了解具體的代碼實現,并且快速應用到實際開發中。

(3)內容最新

本書的另一個特點就是內容保證最新。書中的代碼和示例程序都基于Flask最新發布的穩定版1.0。書中涉及的其他Pyhton包和前端框架(Boostrap、Materialize等)全部使用最新版本,并且對未來可能會有的變化會加以說明。這些特點可以保證書中的內容在一定時間內不會過時。對于其他書籍或教程中存在的關于Flask的誤區,本書也會逐一糾正說明。

除了使用的工具保持最新,本書還引入了Python和Flask開發中的新變化,比如Flask的命令行系統、新的Python包管理工具(Pipenv)、新的包上傳工具(twine)、新的Py PI站點(https://pypi.org)、在Py PI上使用Markdown格式的README……

本書核心內容

本書由三部分組成,分別為基礎篇、實戰篇、進階篇,共16章。本書章節經過精心設計,力求讓讀者可以循序漸進地掌握Flask開發的基礎知識和技巧。

第一部分:基礎篇。介紹Flask開發相關的基礎知識。

? 第1章:搭建開發環境,編寫一個最小的Flask程序并運行它,了解Flask基本知識。

? 第2章:介紹Flask與HTTP的交互方式以及相關的Flask功能。

? 第3章:介紹Jinja2模板的使用。

? 第4章:介紹Web表單的創建和表單數據的驗證。

? 第5章:介紹在Flask程序中使用數據庫進行CRUD操作。

? 第6章:介紹在Flask程序中發送電子郵件的幾種方式。

第二部分:實戰篇。通過幾個示例程序來介紹Flask開發中各類功能的實現方法和技巧。

? 第7章:通過一個簡單的留言板程序Say Hello介紹Web開發的基本流程和基本的項目管理方式,對第一部分的基礎知識進行簡單回顧。

? 第8章:通過個人博客程序Bluelog介紹CRUD操作、用戶認證、文章評論、管理后臺等功能。

? 第9章:通過圖片社交程序Albumy介紹用戶注冊和認證、用戶權限管理、圖片上傳與處理、用戶頭像、復雜的數據庫關系、復雜的數據庫查詢、全文搜索等內容。

? 第10章:通過待辦事項程序Todoism介紹單頁應用、國際化與本地化、Web API、OAuth服務器端實現等內容。

? 第11章:通過聊天室程序Cat Chat介紹Websocket應用、OAuth客戶端實現(第三方登錄)、Markdown支持、代碼語法高亮等內容。

第三部分:進階篇。介紹Flask程序的部署流程,如測試、性能優化、部署上線;介紹Flask開發的進階話題,如Flask擴展開發、Flask源碼與機制分析。

? 第12章:介紹Flask程序的自動化測試,包括單元測試和UI測試的編寫、計算測試覆蓋率和代碼質量檢查。

? 第13章:介紹對Flask程序進行性能優化的主要措施,包括函數與數據庫查詢的性能分析、緩存的使用、靜態文件優化。

? 第14章:介紹部署Flask程序前的準備,以及部署到Linux服務器和云平臺Heroku、Python Anywhere的完整流程。

? 第15章:通過擴展Flask-Share來介紹編寫Flask擴展的完整流程,從創建項目到上傳到Py PI。

? 第16章:介紹Flask的一些設計理念,包括底層WSGI的相關實現,并對各個主要功能點進行源碼分析。

此外,書的最后還提供了附錄A,補充介紹一些Flask學習相關的資源。

閱讀前的準備

在開始我們的Flask之旅前,還有一些準備工作要做。首先,你要有一臺安裝了Python(https://www.python.org/)的電腦,并且,你要了解Python的基礎知識。

提示

本書中所有示例程序的代碼均通過了Python 2.7和Python 3.6的測試,建議你選用這兩個版本。因為大多數Python包(包括Flask)已經不再支持Python 2.6及以下版本,以及Python 3.3及以下版本,確保不要使用這些版本。另外,Python官方社區將于2020年1月1日停止對Python 2.×的維護,這或許可以作為你選擇Python版本時的考量之一。

其次,本書有大量操作需要在命令行(CLI,Command Line Interface)下進行,所以你要熟悉你所在操作系統下的命令行。書中會在涉及操作系統特定的命令時給出提示,Windows系統給出的命令對應的是CMD.exe,Linux和mac OS系統則對應的是Bash。

最后,HTML、CSS、Java Script分別作為一個Web頁面的結構層、表現層和行為層,是Web開發的基礎,你需要對它們有基本的了解。任何一個Web程序都是由單個或多個Web頁面,頁面上包含的內容,以及按鈕、表單等交互組件構成的。在本書中,我們會使用Flask操作HTML頁面;為了讓HTML頁面更加美觀,我們會使用CSS定義樣式,為了簡化編寫樣式的操作,我們會使用CSS框架,比如Bootstrap(http://getbootstrap.com/);為了讓某些操作更加合理和方便,或為了給程序增加動畫效果,我們會使用Java Script來操作頁面元素,為了簡化編寫Java Script的工作,我們會使用Java Script庫j Query(https://jquery.com/)。

附注

在Web開發中,大部分程序離不開Java Script,Java Scipt可以很方便、簡潔地實現很多頁面邏輯和功能。為了更多地介紹Flask,本書將盡量避免使用過多的Java Scipt代碼。

如果你還不熟悉這些內容,那么可以通過下面的網站來快速入門:

? W3Schools(https://www.w3schools.com)。

? MDN Web文檔(https://developer.mozilla.org/docs/Web)。

? Codecademy(https://www.codecademy.com)。

使用示例程序

示例程序均使用Git來管理程序版本,為了便于大家獲取示例程序,代碼均托管在Git Hub(https://github.com/)上。Git(https://git-scm.com/)是最流行的開源VCS(Version Control System,版本控制系統),大多數項目都使用它來追蹤文本文件(代碼)的變化。Git非常易于上手,如果你還不熟悉它,可以訪問Try Git(https://try.github.io/)來快速了解Git。

你可以訪問Git官網的下載頁面(https://git-scm.com/downloads)了解不同操作系統下Git的安裝方法,安裝成功后即可使用它來獲取示例程序。下面介紹了兩種使用示例程序的方式。

1.閱讀示例程序

因為示例程序都托管在Git Hub上,所以閱讀示例程序最簡單的方式是在瀏覽器中閱讀。在對應的章節,我們會給出示例程序在Git Hub上的倉庫鏈接。

如果要在本地閱讀,那么首先使用git clone命令把Git Hub上的示例程序克隆(即復制)到本地,以本書的項目倉庫為例:

        $ git clone https://github.com/greyli/helloflask.git

提示

clone命令后面的參數是遠程Git倉庫的URL,最后的“.git”后綴可以省略。這里的URL中的傳輸協議使用了http(s)://協議,你也可以使用git://協議,即git://github.com/greyli/helloflask.git

使用ls(即List)命令(Windows下使用dir命令)列出當前目錄下的文件信息,你會看到當前目錄中多了一個helloflask文件夾,這就是我們剛剛復制下來的項目倉庫。下面使用cd(即change directory)命令切換進這個文件夾:

        $ cd helloflask

現在你可以使用你喜歡的文本編輯器打開項目文件夾并準備閱讀了。建議使用輕量的文本編輯器來閱讀示例代碼,比如Atom(https://atom.io/)、Sublime Text(https://www.sublimetext.com/)或Notepad++(https://notepad-plus-plus.org/)。

在對應章節的開始處都會包含從Git Hub復制程序、創建虛擬環境并運行程序的基本步驟,你可以一邊閱讀源碼,一邊實際嘗試使用對應的程序功能。

示例程序根據章節內容設置了對應的標簽,每個標簽都對應了一個程序版本。你可以使用git tag-n命令查看當前項目倉庫中包含的所有標簽:

        $ git tag -n

使用git checkout命令即可簽出對應標簽版本的代碼,添加標簽名作為參數,比如:

        $ git checkout foo

在后面,書中會在每一次包含更改文件的章節提示應該簽出的標簽名。如果在執行新的簽出命令之前,你對文件做了修改,那么需要使用git reset命令來撤銷改動:

        $ git reset --hard

注意

git reset命令會刪除本地修改,如果你希望修改示例程序源碼并保存修改,可以參考后面的“改造示例程序部分”。

如果你想比較兩個版本之間的變化,可以使用git diff命令,添加比較的兩個標簽作為參數,比如:

        $ git diff foo bar

如果你想更直觀地查看版本變化,可以使用下面的命令打開內置的Git瀏覽客戶端:

        $ gitk

除了內置的Git客戶端,還有大量的第三方客戶端可以使用,詳情可以訪問https://git-scm.com/downloads/guis查看。另外,你也可以訪問Git Hub的Web頁面查看不同版本(標簽)的變化,即查看某項目兩個版本之間的變化可以訪問https://github.com/用戶名/倉庫名/compare/標簽A...標簽B,比如對foo和bar標簽進行比較可以訪問https://github.com/greyli/helloflask/compare/foo...bar

最后,你可以定期使用git fetch命令來更新本地倉庫:

        $ git fetch --all
        $ git fetch --tags
        $ git reset --hard origin/master

2.改造示例程序

只看菜譜是不能學會烹飪的,自己動手編寫代碼才是學習Flask最有效的途徑。你可以在閱讀示例程序的同時編寫自己的Flask程序,將書中介紹的內容和實際的示例程序代碼作為參照。另外,你也可以創建一份示例程序的拷貝(派生,fork),這樣你就可以自由地修改示例程序的源碼,改造成你自己的示例程序。創建派生倉庫的主要步驟如下:

1)注冊一個Git Hub賬號(https://github.com)。

2)訪問示例程序的Git Hub倉庫頁面(比如https://github.com/greyli/helloflask),單擊右上角的Fork按鈕創建一個派生倉庫,如下圖所示。

創建派生倉庫

3)在本地使用git clone命令復制新創建的派生倉庫,使用你的用戶名構建URL:

        $ git clone https://github.com/你的用戶名/helloflask.git

現在你可以在本地自由修改實例程序,并提交到你的Git Hub賬戶的遠程倉庫中了。

排版約定

Windows中的命令提示符為“>”,而Linux或mac OS中的命令提示符為“$”,本書中將統一使用美元符號(即“$”)作為命令提示符,比如:

        $ cd hello

命令提示符為三個大于號(即“>>>”)的表示Python Shell中輸入的代碼,比如:

        >>> import os

“$”或“>>>”標記的文本下方沒有命令提示符的文字表示輸出的字符,不需要打出,比如:

        $ cat hello.txt
        Hello, Flask!

為了節省篇幅,本書中的代碼片段沒有嚴格遵照PEP8的約定,比如類和函數之間的空行被縮減為1行。另外,出現過的導入語句和無關的代碼塊會被省略掉。為了節省篇幅,代碼中重復或不相干的部分都使用三個省略號代替,比如:

        def do_someting():
            ...
            if foo:
                return False
            return True

代碼、命令或URL中有時會使用“<”和“>”來標識演示內容,在實際輸入中并不需要寫出,比如:

        https://github.com/<你的用戶名>

因為在示例代碼中通常會引入大量隨機字符,這些隨機字符包含下面的使用規則。

? 列表1:spam、ham、eggs。

? 列表2:foo、bar、baz、qux、quux、quuz、corge、grault、garply、waldo、fred。

? 人名會使用Grey Li或grey。

? 網站會使用helloflask.com或example.com。

? 其他需要讀者自己修改的占位字符會使用類似your_password、you_email的文本。

最后,為了盡量讓正文保持簡潔,每一章新涉及的Python庫都會在第一小節前匯總列出對應的版本和相關鏈接(比如主頁、源碼和文檔)。因為大部分項目在Py PI上提供的介紹都不夠完善,除非程序有獨立的主頁,否則會優先使用Git Hub或Bit Bucket上的項目頁面作為主頁。

讀者反饋與疑問

由于筆者水平有限,編寫時間也比較倉促,書中難免有錯誤或者不全面的地方,在此懇請讀者朋友批評指正。

關于本書的疑問和反饋可以到本書在Git Hub上的項目倉庫Hello Flask(https://github.com/greyli/helloflask)中創建Issue并提交;書中的錯誤或筆誤可以修改倉庫中的勘誤文件(Errata.md)并提交Pull Request。

對于示例程序的疑問、反饋和改進建議可以到示例程序在Git Hub上的項目倉庫提交Issue或Pull Request,具體的網址可以在對應的章節看到。

當然,你也可以直接發郵件與筆者聯系,筆者的郵箱是withlihui@gmail.com。

本書的配套資源索引可以在本書的主頁http://helloflask.com/book上看到。另外,你可以訪問筆者的博客(http://greyli.com)或是知乎專欄“Hello,Flask!”(https://zhuanlan.zhihu.com/flask)閱讀更多與Flask相關的文章。

致謝

首先,感謝機械工業出版社華章公司的楊福川老師和李藝老師。因為楊老師的信任,才讓筆者有幸寫作這本書。本書能夠順利完成,離不開兩位老師的悉心指導,更離不開其他編輯的辛苦工作。

其次,感謝Flask社區和其他開源項目的貢獻者們創造了這一切,也感謝在Stack Overflow、Git Hub、Reddit和Wikipedia等網站貢獻知識的開發者們。

最后,感謝父母和奶奶這段時間的支持和幫助,也感謝女友魏瑤和弟弟家輝給予的鼓勵和陪伴。

主站蜘蛛池模板: 云阳县| 邹城市| 济源市| 太仓市| 贞丰县| 广西| 阳高县| 洪江市| 特克斯县| 龙井市| 黎平县| 衡山县| 边坝县| 岑巩县| 吴川市| 龙川县| 惠来县| 枝江市| 临汾市| 子洲县| 安康市| 全南县| 吐鲁番市| 拉萨市| 湘乡市| 峨边| 云阳县| 循化| 景泰县| 贵州省| 孙吴县| 筠连县| 绥芬河市| 吴堡县| 潞城市| 浦江县| 富顺县| 广西| 收藏| 张家港市| 江口县|