【整理】Python常用的框架

天府雲創發表於2018-01-18

今天,有非常多的Python框架,用來幫助你更輕鬆的建立web應用。這些框架把相應的模組組織起來,使得構建應用的時候可以更快捷,也不用去關注一些細節(例如socket和協議),所以需要的都在框架裡了。接下來我們會介紹不同的選項。

Python發源於八十年代後期。開發者是Centrum Wiskunde & Informatica的Guido van Rossum,這是位於荷蘭阿姆斯特丹科學園區的一個數學和電腦科學研究中心。之後Van Rossum一直是Python開發很有影響的人物。事實上,社群成員給了他一個榮譽稱號:終生仁慈獨裁者(BDFL)。

經過初期的不起眼,Python已經成為網際網路最流行的服務端程式語言之一。根據W3Techs的統計,它被用於很多的大流量的站點,超過了ColdFusion, PHP, 和ASP.NET。其中超過98%的站點執行的是Python 2.X,只有1%多一點的站點執行3.0。

框架讓開發更輕鬆

今天,有著大量的Python框架,它們可以讓web應用的開發更輕鬆。這些框架把不同的模組整合在一起,讓你更快的構架程式,而不用關注一些細節(例如socket和協議),框架提供了需要的所有功能。

作為分成兩部分的系列文章的第一部分,我們會介紹一些最流行的Python框架。雖然大部分現代的web框架都執行在服務端,也有一些框架開始嘗試與客戶端程式碼結合,可以在客戶端執行(例如Skulpt和Trinket)。Python框架通常分為全棧框架和非全棧框架。全棧框架設計從使用者體驗到資料庫的所有技術,非全棧框架則並不包含整個開發的全部技術。

此外還有一種微框架,也屬於非全棧框架,但是更輕量級。有的情況下,微框架是比較適合的,有時又適合使用全棧框架。在文章的第二部分我們會對全棧框架和微框架做一個比較。

    從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高效能網路通訊,測試,爬蟲等。

Django: Python Web應用開發框架
Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理後臺:只需要使用起ORM,做簡單的物件定義,它就能自動生成資料庫結構、以及全功能的管理後臺。

Diesel:基於Greenlet的事件I/O框架
Diesel提供一個整潔的API來編寫網路客戶端和伺服器。支援TCP和UDP。

Flask:一個用Python編寫的輕量級Web應用框架
Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2
模板引擎。Flask也被稱為“microframework”,因為它使用簡單的核心,用extension增加其他功能。Flask沒有預設使用的數
據庫、窗體驗證工具。

Cubes:輕量級Python OLAP框架
Cubes是一個輕量級Python框架,包含OLAP、多維資料分析和瀏覽聚合資料(aggregated data)等工具。

Kartograph.py:創造向量地圖的輕量級Python框架
Kartograph是一個Python庫,用來為ESRI生成SVG地圖。Kartograph.py目前仍處於beta階段,你可以在virtualenv環境下來測試。

Pulsar:Python的事件驅動併發框架
Pulsar是一個事件驅動的併發框架,有了pulsar,你可以寫出在不同程式或執行緒中執行一個或多個活動的非同步伺服器。

Web2py:全棧式Web框架
Web2py是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用,相容Google App Engine。

Falcon:構建雲API和網路應用後端的高效能Python框架
Falcon是一個構建雲API的高效能Python框架,它鼓勵使用REST架構風格,儘可能以最少的力氣做最多的事情。

Dpark:Python版的Spark
DPark是Spark的Python克隆,是一個Python實現的分散式計算框架,可以非常方便地實現大規模資料處理和迭代計算。DPark由豆瓣實現,目前豆瓣內部的絕大多數資料分析都使用DPark完成,正日趨完善。

Buildbot:基於Python的持續整合測試框架
Buildbot是一個開源框架,可以自動化軟體構建、測試和釋出等過程。每當程式碼有改變,伺服器要求不同平臺上的客戶端立即進行程式碼構建和測試,收集並報告不同平臺的構建和測試結果。

Zerorpc:基於ZeroMQ的高效能分散式RPC框架
Zerorpc是一個基於ZeroMQ和MessagePack開發的遠端過程呼叫協議(RPC)實現。和 Zerorpc 一起使用的 Service API 被稱為 zeroservice。Zerorpc 可以通過程式設計或命令列方式呼叫。

Bottle: 微型Python Web框架
Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是因為它只有一個檔案,除Python標準庫外,它不依賴於任何第三方模組。

Tornado:非同步非阻塞IO的Python Web框架
Tornado的全稱是Torado Web Server,從名字上看就可知道它可以用作Web伺服器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了之後便開源了出來。

webpy: 輕量級的Python Web框架
webpy的設計理念力求精簡(Keep it simple and powerful),原始碼很簡短,只提供一個框架所必須的東西,不依賴大量的第三方模組,它沒有URL路由、沒有模板也沒有資料庫的訪問。

Scrapy:Python的爬蟲框架
Scrapy是一個使用Python編寫的,輕量級的,簡單輕巧,並且使用起來非常的方便。

多框架

雖然很難相信,但這些只是少數幾十個開發人員可以使用Python框架,。Python.org報導,Django,TurboGears和web2py是最受歡迎的完整選項。為了在框架優化方面提供一個全面的觀察,這裡我們新增了兩個高階形態的微型框架。有著熱情的追隨者其他框架包括 Pyramidweb.pyBoboAlbatross, 和 CherryPy

【作者個人觀點】

對初學者來說,循序漸進是最重要的,我推薦學習 Flask(Welcome | Flask (A Python Microframework)
Flask 很輕,花很少的成本就能夠開發一個簡單的網站。非常適合初學者學習。
Flask 框架學會以後,可以考慮學習外掛的使用。例如使用 WTForm + Flask-WTForm 來驗證表單資料,用 SQLAlchemy + Flask-SQLAlchemy 來對你的資料庫進行控制。
BTW:果殼網基於 Flask 開發的。

Flask是一個基於Jinja2和Werkzeug的python微框架,和其他框架類似,它是BSD授權的,一個有少量限制的免費軟體許可。使用Flask的網站包括領英LinkedIN和Pinterest。

另外也簡單介紹下其他框架:
1. Django。如樓上所說,是一個全能型框架。目前 Django 的使用面還是很廣的,有學習的價值,但是不建議初學者學習,因為要學習的東西太多了,一下子難以吸收會失去興趣。當然,Django 的目的是為了讓開發者能夠 快速 地開發一個網站,它提供了很多模組,其中我最喜歡的就是 admin 模組,your.site.com/admin 就進入了網站的後臺(內建的哦~)方便地對資料進行操作,等等。。。。因此,如果對 Django 熟悉的話,papapa 一下子就寫好一個網站的原型了。
2. Tornado。傳說中效能高高的框架。Tornado 是一個很好的框架,支援非同步處理的功能,這是它的特點,其他框架不支援。另外一點是,Tornado 的設計似乎更注重 RESTful URL。但 Tornado 提供了網站基本需要使用的模組外,剩下的則需要開發者自己進行擴充套件。例如資料庫操作,雖然內建了一個 database 的模組(後來獨立出去了,現在叫做 torndb,bdarnell/torndb · GitHub)但是不支援 ORM,快速開發起來還是挺吃力的。如果需要 ORM 支援的話,還需要自己寫一層將 SQLAlchemy 和 Tornado 聯絡起來,而且這裡還有一個坑。
BTW:知乎就是基礎 Tornado 開發的。
3. Bottle。Bottle 和 Flask 都屬於輕量級的 Web 框架。但是 Bottle 似乎落寞了。我覺得跟他的 API 設計有關係。個人認為 Bottle 使用起來不那麼順手,因此也用得少。這裡不做太多介紹。
4. web.py。也是很輕的一個框架,使用不多,也不做介紹。
5. web2py。我看樓上都沒有對這個框架做介紹。這個框架是 Google 在 web.py 基礎上二次開發而來的,相容 GAE 。效能據說很高,曾經用他來做自己的主頁,感覺也還不錯。缺點同樣是對擴充套件支援不太好,需要自己進行擴充套件。
6. Quixote。著名的 豆瓣 就是基於 Quixote 開發的。跟上面幾個框架不同,Quixote 的路由會有些特別。另外 Quixote 的效能據說也好。
7、豆瓣2個產品線上使用了「小眾」的Pyramid(據我所知國內就《碼農週刊》在用)。其實它是一個很成熟的企業級別的Web框架。

8、我覺得新手還是不要用Django這樣龐大的東西,建議Flask,很多東西自己實現。有一定的認識之後,再用Django,會覺得很順心。
越是大的專案,越會覺得框架能幫助的太少,更多的是定製.Django修改起來相當麻煩.但微框架你從一開始就差不多是在定製了.另外web.py不錯,簡單,小巧,靈活。django -> web.py -> tornado -> bottle -> flask

更多討論請移步至社群:Python 有哪些好的 Web 框架? https://www.zhihu.com/question/20706333

找到正確的適合選擇

正確框架的選擇取決於專案的規模,它的通訊需求,它是否是一個獨立的應用程式,定製需求的級別,開銷,和許多其他因素。同樣重要的是,它取決於哪個框架適合你個人的工作方式。回顧這些專案並下載他們最新的版本。在計劃一個主要旅行之前,試開一下確保你在一個合適的車輛中。


相關文章