Flask入門及進階指南-第一篇 Flask基礎篇--Python Web開發概述

        本書第一篇Flask基礎篇,主要介紹學習Flask開發的基礎知識,第1章從Python語言做Web開發講起,介紹了Python的幾種當前主流的Web框架,以及框架選型的原則建議,第2章進一步講解開始Flask開發環境的搭建,Flask的開發Python的基礎知識,後續第3章以後講解Flask開發實踐運用的相關知識,包括視圖和路由,Flask模板、Flask表單、Flask數據庫、Flask藍圖與測試。

       每章節對相應的概念和術語都會做精煉的講解,並提供相關的示例程序或核心代碼,並附有註釋和講解,要點處會有着重標註,有助於學習者更清晰的理解。

       本篇章節更適用於學入門或開發基礎薄弱者進行學習。

    Python Web開發概述

本章從爲什麼用Python做Web開發講起,有哪些優勢和特點,Python的Web框架有很多,我們列出Python主流Web框架,並各自列出優缺點,給讀者做參考選型之用。

1.1  爲什麼選擇Python做Web開發

當下Web開發非常的普及,有很多的編程語言可以選擇,爲什麼選擇Python呢?

2019年2月,在編程語言流行指數(PopularitY of Programming Language,簡稱PYPL)公佈二月榜單中,Python語言排名第一,超越Java成爲最流行的編程語言,可見Python現在有多麼流行。現在無論PC端還是移動互聯網的Web開發工作,對產品做的各種嘗試都需要更快地拿出模型並進行迭代,創業公司尤甚。Python語言更好地符合了時代的需求,所以它也受到了越來越多的關注,越來越多的人接受Python,並在生產環境中使用它。個人認爲Python非常適合做Web開發,理由如下:

(1)Python是一門優雅而健壯的編程語言,它繼承了傳統編譯語言的強大性和通用性,同時借鑑了簡單腳本和解釋型語言的易用性。Python非常適合做快速的原型開發。很多場景下的性能問題可以通過使用C/C++寫Python擴展等方式優化解決。

(2)Python應用廣泛,在大數據、算法、運維等領域都有不錯的對應工具和庫,可以有效降低產品流程中不同職位之間的技術壁壘,團隊人員的溝通更容易,解決問題更快。

(3)Python標準庫和第三方庫很強大,有非常多的知名項目都是用Python編寫的。

(4)從2005年Django開源,2008年Reddit開源,到2010年Flask開源,Python用作Web開發已經有着10多年的歷史,國內的豆瓣、搜狐、國外的Reddit、YouTube、Instagram、Pinterest、Bitbucket、Disqus、Dropbox等公司都選擇Python作爲Web開發語言。不用擔心Python可靠性與性能問題,因爲它已經經受了事件和大規模用戶併發訪問的考驗。

1.2  Python主流Web框架介紹

Python的Web框架非常多,每種框架都有各自的開發者在使用,他們使用熟悉自己用的框架都會覺得好,以致互相爭論哪個框架好壞優劣,Web開發工程師面臨框架選型,往往會非常困擾,尤其對初中級工程師,沒有具體使用經驗,不知道如何選擇。我們就來介紹當前主流的Web框架特點和應用場景。

主流的Web框架有以下幾種:

  1. Django

Django最初是被開發用來管理勞倫斯出版集團旗下以下以新聞內容爲主的網站的,它以比利時的吉普賽爵士吉他手Django Reinhardt來命名,它和Flask是使用最廣泛的Python Web框架,Django能如此知名很大程度上是因爲提供了非常齊備的官方文檔。它提供了一站式的解決方案,包括緩存、ORM、管理後臺、驗證、表單處理等。使得開發複雜的數據庫驅動的網站變得很簡單。但正因爲它堅持自己對於Web框架的理解,系統耦合度太高,替換掉內置的功能往往需要花費一些功夫,所以學習曲線也相當陡峭。

  1. Flask

Flask是一個輕量級Web應用框架,它基於Werkzeug實現的WSGI和Jinja2模板引擎。Flask的作者是Armin Ronacher,本來這只是作者愚人節開的一個玩笑,但是開源之後卻受到Python程序員的喜愛,目前在GitHub上的Star數量已經超過了Django。它的設計哲學和Django不同;只保留核心,通過擴展機制來增加其他功能。Flask用到的依賴都是Pocoo團隊開發的。Pocoo團隊其他的項目還有Pygments、Sphinx、以及Iodgedit。Flask的擴展環境非常繁榮,基本上Web應用的每個環節都有對應的擴展供選擇。就算沒有對應的擴展也能很方便地自己實現一個。

  1. Pyramid

Pyramid在國內知名度並不高,主要原因是中文文檔匱乏,其高級用法需要通過閱讀源代碼獲取靈感,儘管被Django和Flask的光芒遮蔽,但是它的性能要比Flask高,Pyramid的靈感來源於Zope、Pylons1.0heDjango。在我們的傳統觀點裏,小框架通常犧牲了大框架的特色,反之亦然。但是事實上我們不能真正把控一個應用程序最終的發展情況,而Pyramid在努力朝着勝任不同級別應用的框架方向在走。雖然它默認使用Chameleon和Mako模板,但很容易切換成Jinja2,深圳可以讓多種模板引擎共存,通過問卷後綴名來識別。豆瓣讚賞和豆瓣錢包等產品就是基於此框架實現的,代碼量級和Flask相同,性能比Flask略高。

  1. Bottle

Bottle也是一個輕量級的Web框架。它的特點是單文件,代碼只使用了 Python標準庫,而不需要額外依賴其他第三方庫。它更符合微框架的定義,截止到今天只有4100多行代碼。

  1. Tornado

Tornado全稱Tornado Web Server,最初是由FriendFeed開發的非阻塞式Web服務器,現在我們看到的是被Fackbook收購後開源出來的版本。它和其他主流框架有個明顯的區別;它是非阻塞式服務器,而且速度相當快。得益於其非阻塞的方式和對epoll的運營,Tornado每秒的是可以處理數以千計的連接。這意味着對於長輪詢,WebSocket等實時Web服務來說,Tornado是一個理想的Web框架。

  1. Web.py

Web.py也是一個微框架,由Reddit聯合創始人、RSS規格合作創造者,著名計算機黑客Aaron Swartz開發。Web.py使用基於類的視圖。簡單易學卻功能強大。

  1. 小衆的Web框架
  1. Quixote

Quixote是由美國全國研究創新聯合會(Corporation for National Research Initiatives,CNRI)的工程師A.M.Kuchling、NeilSchemenauer和Greg Ward開發的一個輕量級Web框架。它簡單、高效、代碼簡潔。豆瓣的大部分用戶產品都使用定製版的Quixote作爲Web框架,雖說這有歷史原因(當時Django/Flask等框架還沒有出現)。但是也證明這個始於2000年的框架是可以經受時間考驗的。它使用目錄式的URL分發規則,用Python來寫模板。PTL模板更適合程序員,但是並不適合美工參與前端代碼的編寫和修改,豆瓣在開發中使用了Mako替代PTL。不建議在生產環境選用Quixote。

  1. Klein

Klein是Twisted組織開源出來的基於werkzeug和twisted web的微框架。Flask很不錯,但是不能使用異步非阻塞的方式編程,根本原因是它和Django、Pyramid一樣,都基於WSGI,而WSGI的接口是同步阻塞的。Klein用法非常像Flask,卻可以使用異步的方式開發Web應用。

1.3  選擇Web框架的原則的建議

介紹這麼多的框架,那麼在工作中怎麼進行選擇呢?以下是筆者總結的一些原則:

(1)選擇更主流的框架。因爲它們的文檔更齊全,技術積累更多,社區更繁盛,能得到更好的支持。

(2)關注框架的活躍情況。關注項目的更新頻率、Issue和Pull Request的響應情況。如果一個項目已經很長時間沒有更新了,或者有一堆問題需要解決但是沒有得到迴應,就不應該將這一的框架放在生產環境中。

(3)確認選擇的框架是否足夠滿足需求。沒有更好的框架,只有最適合的框架。你所選擇的Web框架不僅需要滿足當前的需求,也要充分考慮項目發展一段時間之後的情況。即前瞻性。如果在做選擇時有個人喜好這樣的因素,需要確認自己有能力對選擇的Web框架提供支持,避免盲目選擇而導致將來推到重來的情況。

(4)注意媒體時效性。在做選擇的時候可能會參考網絡上的一些文章,但是需要注意其發表時間。舉個例子,看了一篇2012年的博客,裏面說應該選擇A而不是B,並給了多個理由。而現在的情形可能已經發生了編號;B經過很久的努力已經做得更優秀或者2012年之後出現了更優秀的C。

(5)客觀看待媒體的觀點。媒體的觀點並不一定是正確的(或者不是全部正確)。如果不是官方的說明,就應該保持懷疑和謹慎的態度,取其精華去其糟粕,切勿完全拿來主義,應該真正做實踐驗證之後再做決定。

對於上述的Web框架,可以參考如下幾條建議:

(1)如果是爲了供演示或者不太考慮長期發展,只是需要用到數據庫的CURD操作,些REST API之類的簡單型應用,框架的選擇非常寬鬆,用着順手的即可。

(2)如果你是初學Web框架,建議選擇Flask作爲入門框架,學習曲線相對Django而言要低很多。等熟悉Flask之後再學習Django,就會容易很多。

(3)Pyramid和Django都是面向大型應用的,Pyramid更靈活,開發者空間大很多,值得考慮。

(4)網站性能出現問題時,往往問題不只出在Web框架和編程語言上,做選擇時在環境中按實際產品邏輯測試一段時間即可得到結論就,但是不要只相信看到的一些性能對比文章,尤其不要做無意義的Hello World級別的測試。

1.4  Flask框架開發特性

Flask是非常流行的Python Web框架,它能如此流行,原因主要有如下幾點:

(1)有非常齊全的官方文檔,上手非常方便。

(2)有非常好的擴展機制和第三方擴展環境,工作中常見的軟件都會有對應的擴展。自己動手實現擴展也很容易。

(3)社區活躍度非常高。

(4)微框架的形式給開發者更大的選擇空間。

(5)Pocoo團隊出品,Flask和相關依賴(Jinja2,Werkzeug)的設計很優秀。比如使用裝飾器配置路由、用Blueprint實現模塊化、請求/應用上下文等。

Flask主要依賴三個庫:

(1)Jinja2:默認的模板引擎。

(2)Werkzeug:一個包含WSGI、路由、調試的工具集。

(3)Itsdangerous:基於Django簽名模塊(http://bit.ly/28QV7Fb)的簽名實現。

Flask本身儘量保持了內核的精簡,其設計初衷就是不會替開發者做太多決策,而且就算Flask已經幫你做出選擇也能很容易地替換。舉2個例子:

(1)Web程序不可避免要和數據庫打交道,使用SQLAlchemy、MongoEngine、不用ORM(對象關係映射)而直接基於MySQL-Python這樣底層驅動進行開發都是可以的,選擇權完全在你的手中。

(2)把默認的Jinja2模板引擎替換成Mako或者其他模板引擎都非常容易。

1.5  本章小結

本章從Python成爲第一位的語言流行講起,講述了Python做Web開發的主流框架,以及列舉出當下衆多的Python Web框架,分別進行點評,並對如何進行Web框架對比選型給出一些建議,進而講述Flask做Web開發框架的特性和優勢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章