首頁 後端開發 Python教學 詳談五中常用Python Web框架

詳談五中常用Python Web框架

May 04, 2017 pm 02:20 PM
python web框架

Python這麼多框架,能挨個玩過遍的人不多,坦白的說我也只用過其中的三個開發過項目,另外一些稍微接觸過,所以這裡只能淺談一下,歡迎懂行的朋友補充

說到Web Framework,Ruby的世界Rails一統江湖,而Python則是一個百花齊放的世界,各種micro-framework、framework不可勝數,不完全列表見:

wiki.python.org/moin/WebFrameworks

雖然另一大腳本語言PHP也有不少框架,但遠沒有Python這麼誇張,也正是因為Python Web Framework(Python Web開發框架,以下簡稱Python框架)太多,所以在Python社群總是有關於Python框架孰優孰劣的話題,討論的時間跨度甚至長達3-5年。

Python這麼多框架,能挨個玩過遍的人不多,坦白的說我也只用過其中的三個開發過項目,另外一些稍微接觸過,所以這裡只能淺談一下,歡迎懂行的朋友補充。

Django

詳談五中常用Python Web框架

#Python框架雖然說是百花齊放,但仍然有那麼一家是最大的,它就是Django。要說Django是Python框架裡最好的,有人同意也有人 堅決反對,但說Django的文檔最完善、市場佔有率最高、招聘職位最多估計大家都沒什麼意見。 Django為人所稱道的地方主要有:

完美的文檔,Django的成功,我覺得很大一部分原因要歸功於Django近乎完美的官方文檔(包括Django book)。

全套的解決方案,Django象Rails一樣,提供全套的解決方案(full-stack framework + batteries included),基本上要什麼有什麼(例如:cache session、feed、orm、geo、auth),而且全部Django自己造,開發網站應手的工具Django基本上都給你做好了,因此開發效率是不用說的,出了問題也算好找,不在你的程式碼裡就在Django的源碼裡。

強大的URL路由配置,Django讓你可以設計出非常優雅的URL,在Django裡你基本可以跟醜陋的GET參數說拜拜。

自助管理後台,admin interface是Django裡比較吸引眼球的一項contrib,讓你幾乎不用寫一行程式碼就擁有一個完整的後台管理介面。

系統緊密耦合,如果你覺得Django內建的某項功能不是很好,想用喜歡的第三方函式庫來代替是很難的,例如下面將要說的ORM、Template。要在Django裡用SQLAlchemy或Mako幾乎是不可能,即使打了一些補丁用上了也會讓你覺得非常非常彆扭。

Template功能比較弱,不能插入Python程式碼,要寫複雜一點的邏輯需要另外用Python實作Tag或Filter。關於模板這一點,一直以來爭論比較多,最近有兩篇關於Python模板的比較有趣的文章可供參考:

1 pydanny.blogspot.com/2010/12/stupid-template-languages. html(需FQ)
2 techspot.zzzeek.org/2010/12/04/in-response-to-stupid-template-languages/

URL配置雖然強大,但全部要手寫,這一點跟Rails的Convention over configuration的理念完全相左,高手和初識Django的人配出來的URL會有很大差異。

資料庫schema都給你定好了,這樣問題就來了,例如很多網站要求email地址唯一,可schema裡這個字段的值不是唯一的,糾結是必須的了。

總的來說,Django大包大攬,用它來快速開發一些Web運用是很不錯的。如果你順著Django的設計哲學來,你會覺得Django很好用,越用越順手;相反,你如果不能融入或接受Django的設計哲學,你用Django一定會很痛苦,趁早放棄的好。所以說在有些人眼裡Django無異於仙丹, 但對有一些人來說它又是毒藥且劇毒。

Pylons & TurboGears & repoze.bfg

詳談五中常用Python Web框架

#除了Django另一個大頭就是Pylons了,因為TurboGears2.x是基於Pylons來做的,而repoze.bfg也已經併入Pylons project裡這個大的專案裡,後面不再單獨討論TurboGears和repoze.bfg了。

Pylons和Django的設計理念完全不同,Pylons本身只有兩千行左右的Python程式碼,不過它還附帶一些幾乎就是Pylons御用 的第三方模組。 Pylons只提供一個架子和可選方案,你可以根據自己的喜好自由的選擇Template、ORM、form、auth等組件,系統高度可 定制。我們常說Python是一個膠水語言(glue language),那我們完全可以說Pylons就是一個用膠水語言設計的膠水框架。

選擇Pylons多是選擇了它的自由,選擇了自由的同時也預示著你選擇了噩夢:

學習噩夢,Pylons依賴許多第三方庫,它們並不是Pylons造,你學Pylons的同時還得學這些庫怎麼使用,關鍵有些時候你都不知道你要學什麼。 Pylons的學習曲線相對比Django要高的多,而之前Pylons的官方文檔也一直是人批評的對象,好在後來出了The Definitive Guide to Pylons這本書,這一局面有所改觀。因為這個原因,Pylons一度被譽為只適合高手使用的Python框架。

調試惡夢,因為牽涉到的模組多,一旦有錯誤發生就比較難定位問題處在哪裡。可能是你寫的程式的錯、也可能是Pylons出錯了、再或是SQLAlchemy出錯了、搞不好是formencode有bug,反正很凌亂了。這個只有用的很熟了才能解決這個問題。

Pylons和repoze.bfg的融合可能會催生下一個能挑戰Django地位的框架。

Tornado web.py

詳談五中常用Python Web框架

Tornado即為Web server (對此本文不作詳述),同時又是一個類web.py的micro-framework,作為框架Tornado的想法主要來自Web.py,大家在Web.py的網站首頁也可以看到Tornado的大佬Bret Taylor的這麼一段話(他這裡說的FriendFeed用的框架跟Tornado可以看作是一個東西):

“[web.py inspired the] Web framework we use at FriendFeed [and] the webapp framework that ships with App Engine…”

因為有這層關係,後面不再單獨討論Tornado。

一個框架精簡的好處在於你可以聚焦在業務邏輯上,而不用太多的去關心框架本身或受框架的干擾,同時缺點也很明顯,許多事情你得自己操刀上。

我個人比較偏好這種精簡的框架,因為你很容易透過閱讀原始碼弄清楚整個框架的工作機制,如果框架那一塊不是很合意的話,我完全可以Monkey patch一下按自己的要求來。

Bottle & Flask 

詳談五中常用Python Web框架

Bottle和Flask作為新生世代Python框架的代表,挺有趣的是都採用了decorator的方式配置URL路由,如:

from bottle import route, run
 
@route('/:name')
def index(name='World'):
  return &#39;<b>Hello %s!</b>&#39; % name
 
run(host=&#39;localhost&#39;, port=8080)
登入後複製

Bottle、Flask跟web.py一樣,都非常精簡,Bottle甚至所有的程式碼都在那一個兩千來行的.py檔裡。另外Flask和Pylons一樣,可以跟Jinja2、SQLAlchemy之類結合的很好。

不過目前不管是Bottle還是Flask成功案例都還很少。

Quixote

之所以要特別說一下Quixote,是因為國內的最大的用Python開發的網站「豆瓣網」是用Quixote開發的。我只簡單翻了一下原始碼,沒有做過研究,不發表評論,有經驗的來補充下。我只是在想,如果豆瓣網交到現在開發,應該會有更多的選擇。

其它(web2py、uliweb、Karrigell、Werkzeug …)

最後關於框架選擇的誤解

#在框架的選擇問題上,許多人很容易就陷入了下面兩個誤解中而不自知:

1. 哪個框架最好——世上沒有最好的框架,只有最適合你自己、最適合你的團隊的框架。 程式語言選擇也是一個道理,你的團隊Python最熟就用Python好了,如果最熟悉的是Ruby那就用Ruby好了,程式語言、框架都只是工具,能多、快、好、省的幹完活就是好東西。

2. 過度專注於效能-其實大部分人是沒必要太在意框架的效能的,因為你開發的網站根本就是個小站,能上1萬的IP的網站已經不多了,上10萬的更是很少很少。在沒有一定的訪問量前談效能其實是沒有多大意義的,因為你的CPU和記憶體一直就閒著呢。而且語言和框架一般也不會是效能瓶頸,效能問題最常出現在資料庫存取和檔案讀寫上。 PHP的Zend Framework是出了名的慢,但是Zend Framework一樣有大站,如:digg.com;常被人說有效能問題的Ruby和Rails,不是照樣可以開發出twitter嗎?再者現在的硬體、頻寬成本其實是很低的,特別有了雲端運算平台後,人力成本才是最貴的,沒有上萬的IP根本就不用太在意效能問題,流量上去了花點錢買點伺服器空間好了, 簡單快速的解決效能問題。

註:前面有網友質疑我「Quora是用Pylons開發的」這樣的說法不客觀,特說明一下,這裡所說的某個網站A是用B開發的,只是指A主要或部分是B開發的,大家就不要再去糾結A還用C了。


【相關推薦】

1. Python 基礎入門免費教學

2. Python學習手冊

3. Python物件導向視訊教學

#

以上是詳談五中常用Python Web框架的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

vs code 可以在 Windows 8 中運行嗎 vs code 可以在 Windows 8 中運行嗎 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

visual studio code 可以用於 python 嗎 visual studio code 可以用於 python 嗎 Apr 15, 2025 pm 08:18 PM

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

vscode怎麼在終端運行程序 vscode怎麼在終端運行程序 Apr 15, 2025 pm 06:42 PM

在 VS Code 中,可以通過以下步驟在終端運行程序:準備代碼和打開集成終端確保代碼目錄與終端工作目錄一致根據編程語言選擇運行命令(如 Python 的 python your_file_name.py)檢查是否成功運行並解決錯誤利用調試器提升調試效率

See all articles