Python的Web架構

一個Web架構是一批套件或模組用來允許開發者寫Web應用程式(見 WebApplications)或服務而不必處理像是協定、sockets、程序/執行緒管理等的細節。

大部分的Web架構都只有伺服端的技術,雖然AJAX越來越流行,有些Web架構也開始將AJAV程式碼加入來幫助開發者(客戶端)程式使用者瀏覽器的特殊供工作需求,在客戶端這裡Web架構是用web瀏覽器作為成熟應用執行環境的技術(例如gmail):見Web Browser Programming有更多細節。

當開發者使用架構時,通常會依某種慣例來撰寫程式碼以便讓你可以”插入(plugging in)架構”,代理溝通的責任、基礎設施跟低階的事物到架構中,然後我們在自己的程式碼中可以專注在應用程式的邏輯,這個Web開發的”插入”部份通常可以看成傳統的程式跟函式庫的分別那樣,而 “mainloop”符號派送事件到應用程式碼就很類似在Python 圖形使用者介面程式設計裡介紹的那樣。

通常架構提供一些活動像是解譯請求(取得表單參數、處理cookies跟sessions)、產生回應(提交資料為HTML或其他的格式)、持續不斷地儲存資料等等,由於一個非凡的Web應用程式會需要一些不同種類的抽象,通常這些抽象彼此互相堆疊,所以那些試著提供應用程式完整解決方案的架構通常也被稱作全棧(full-stack)架構,在這架構中他們嘗試提供站中每層的部件。

很多架構現在在他們的支援裡針對上述的活動跟抽象提供一點點的客制,利用只為某些特定東西所提供抽象的組件,因此,你幾乎可以完全從現有的組件來建構自己的全棧架構(full-stack framework)。

受歡迎的全棧架構

一個web應用程式可能使用一個基礎的HTTP應用程式伺服器、一個像是資料庫的儲存機制、一個樣板引擎、一個請求的調度器、一個認證模組跟一個AJAX工具包等的結合,這些可以是個別的組件或是在高階的架構中一起提供。

這些是最熱門的高階架構,很多架構的組件列在WebComponents這一頁。

  • Django (1.1版2009-07-29釋出) – 完美主義者的Web架構(有期限),Django使建構較好的網頁應用程式變得更容易且更快並且程式碼寫得更少,Django是高階的Python Web架構它鼓勵快速開發以及簡潔、務實的設計,它讓你建構高效能、更快地優雅的Web應用程式,Django盡可能地專注在自動化跟固守DRY (Don’t Repeat Yourself,不要自己重複)原則。 http://www.djangoproject.com/.
  • Grok (2009-10-07釋出1.0版,1.1版2010-05-18釋出)是在現有的zope 3函式庫上建構的,但目的是提供一種更容易的學習曲線和更靈活的開發經驗,它是藉著在組態及DRY(不重複自己)的慣例上來實作。
  • Pylons (2009-02-23釋出0.9.7版)是一種輕量級的web架構,強調靈活性和快速開發,它結合了世上Ruby、Python和Perl中最好的想法,提供一個結構,但非常靈活的Python web架構,它也是第一個充分利用新興的WSGI標準的專案,這個專案只有當你需要它時允許廣泛的再利用和靈活性,Pylons跳脫一般的思考方式努力使Web開發更快、彈性跟簡單,Pylons是在Paste(見下面)上建置的。
  • TurboGears (2009-05-27釋出2.0版) 你曾找過的快速Web開發的巨型架構,結合了SQLAlchemy (Model)Genshi (View)Pylons (Controller), RepozeTosca Widgets,在幾分鐘內建構一個資料庫導向、現成的擴充應用程式,有設計者友善的樣板、瀏覽器端簡單的AJAX跟伺服器端、一個令人難以置信威力很強且彈性的物件關聯對映(ORM),以及就像寫一個函式那樣自然的程式碼,在回顧了網站之後檢查:快速入門手冊
  • web2py (2009-11-10釋出1.72.3版,1.79.2版本2010-06-08 22:45:26釋出) 所有的東西打包在一個套件裡沒有任何相依的事件,應用程式的開發、部署、偵錯、測試、資料庫管理和維護可透過所提供的網絡界面來做,web2py沒有組態檔、不需要安裝、可以在USB隨身碟上執行,web2py使用Python的模型、檢視及控制器,內建一個報修系統來管理錯誤,國際化的引擎、透過ORM抽象層來跟MySQL、PostgreSQL、SQLite、Oracle、MSSQL跟Google應用引擎模式運作,web2py包括了處理HTML/XML、RSS、ATOM、CSV、RTF、JSON、AJAX、XMLRPC、WIKI標記等的函式庫,產品就緒,能夠上傳/下載很大的檔案以及向後相容。
  • Zope (2008-10-25釋出2.10.7版、2008-25-10釋出2.11.2版、2009-01-29釋出Zope 3.4.0版,Zope 3.4.1 2010-06-22釋出) 作為Python web 架構的始祖,多年來Zope已經發展了一系列的架構,Zope 1在1999年釋出,Zope 2是一個web架構也是一個通用的應用程式伺服器,今天它主要用於內容管理系統,Zope 3也是一個獨立的架構跟相關的函式庫收集,它也包括了新版的Zope 2,所有的Zope架構包括了ZODB、Python的物件資料庫。

下列見一些其他較冷門的全棧架構!

內容管理系統

內容管理系統(CMS)通常允許你建構對他們實用的應用程式,通常也提供很多在全棧架構中見到的特色,見內容管理系統更多詳細的資料。

Web組件

有些架構提供交互的組件像是樣板/輸出跟認證/授權之類的東西,所以你可以見到不同架構的使用者實際上會使用相同的組件或函式庫,見Web組件有像這樣組件的資料。

Web客戶端架構

相對於伺服器導向的架構藉由支援預先包裝(缺乏彈性、非常具體否則非常好用)的JavaScript組件來提供AJAX(異步JavaScript和XM)、提供像是JavaScript組件產生的請求的伺服端支援,Web客戶端架構採取了瀏覽器引擎動態功能的優點,在瀏覽器引擎個全部潛能中的方法可以被實現,舉例來說,透過編譯Python程式碼置入JavaScript或是內嵌一個Python解譯器到自己的Web瀏覽器中,在某些案例中,Web瀏覽器引擎可以執行在單獨訂製的應用程式裡而不是本質上的”web瀏覽器”中,見Web Browser Programming有更多詳細資料。

其他全棧架構

這些架構也提供很多但不是全部的技術堆疊,然而它們沒有那麼熱門所以沒列在上頭的架構中。

  • CubicWeb – 一個語意的web應用程式架構具有一個查詢語言、一個查詢加檢視的機制、多重資料庫、安全、工作流程、重複使用的組件等等的功能。
  • Enamel – 在Twisted、Nevow、Formal跟SQLAlchemy上的一個抽象層將他們的概念整合在單一的架構下。
  • Gizmo(QP) (2007-04-17釋出0.7版) 擴充了QP (見下面)添加了功能來幫忙建立豐富且嚴格的web介面,包括了一個用來支援(贅餘的)自動產生客戶端欄位驗證以及額外的json回呼。
  • Glashammer (2008-08-11釋出0.1.3版)是一個全棧的Python web架構強調簡單、彈性及擴充性,它是建構在優良的組件之上並且不用重新開發,WSGI、路由、版型、表單、 資料、外掛、程式碼、事件、SQLAlchemy、Storm、Couchdb、OpenID、AppEngine、Jquery等等。
  • Karrigell (2010-02-14釋出3.0.4版,3.1版2010-04-25釋出)是一個彈性的Python web架構,它有清晰直觀的語法,它獨立於任何資料庫、ORM或樣板引擎,並讓程式設計師在不同的程式碼樣市之間選擇。
  • Nagare – 一個web應用程式快速開發的方法,感謝它有進階的功能像是真正地自主跟可重用的組件、延伸、可程式化的HTML/XML、自動的AJAX繪製及資料庫ORM。
  • notmm (2010-03-09釋出0.3.4版,0.3.5版2010-04-12釋出) – 一個可擴展性和很多不同的web工具包架構在Django及其它組件上,notmm工具包是給Django開發者使用WSGI 1.0跟Django來建構自訂化web應用程式的進階Python API。
  • Porcupine (2009-07-18釋出0.6版)提供你建構以資料為中心的Web 2.0應用程式的需求,包括QuiX Javascript工具包跟Porcupine的物件查詢語言(POQL),需要Python 2.5或以上的版本 – 3.0版尚未包括進來。.
  • Pyroxide是建構在Apache的mod_python之上,它使用MVC (模型-視圖-控制器)模式以及其它的傳統物件導向模式,它抽離了mod_python層呈現一個很明智的物件導向架構,這樣開法者可以處理HTTP請求、HTTP回應、頁面控制器、視圖跟領域模型物件,它跟像是Prototype跟Mochikit的AJAX架構整合很好,它配備了一個優雅的ORM架構並且以Zope Page Templates (Simpletal 專案)執行的嚇嚇叫。
  • QP (2009-08-25釋出2.2版)  一個套件長久基於Durus所定義和執行多重Web應用程式,提供標準的持續性Session跟User類別,簡易的互動資料庫sessions,跟安全組裝html的QPY,套件需要在Python >= 2.4上執行,同樣的程式碼基礎包括Python 3.x上執行!
  • SkunkWeb (2004-09-10釋出3.4.0版)
  • Spyce (2006-11-17釋出2.1.3版)
  • Tipfy (2010-06-30有0.5.6版可用) tipfy是一個小而有威力的架構,特別地它是由Google App Engine做的。
  • Tornado (2009-09-10釋出0.1版) 是一個可擴展、非阻塞式的web伺服器的開放原始碼版本,也是推動FriendFeed的工具 (取自Facebook釋出這個專案作為開放原始碼)。
  • WebCore (2010-03-02釋出0.9版) 一個全棧式、輕量型且有效的web開發架構,Web應用程式就跟一個單獨的檔案那樣簡單,或是你所想要的那樣的結構化,利用流行的WSGI組件、ORMs等等、不會讓你鎖住、並且提供一個像是init.d那樣獨立的中介軟體組態。
  • web.py (2010-03-20釋出0.34版) 考量理想的方法來寫一個Web應用程式,編寫程式碼來實現。
  • Webware (2010-04-18釋出1.1beat1) 是一套Python套件跟工具用來開發物件導向、web基礎的應用程式。
  • Werkzeug (2010-04-23釋出0.6.2版) 是一個Unicode的,包括一個強大的除錯器、功能齊全的request跟response物件、處理實體標記的HTTP工具、快取控制表頭、HTTP日期、cookie處理、檔案上傳、強大的URL路由系統跟一堆社群貢獻的額外模組。
  • WHIFF (2010-06-03釋出1.0版) WHIFF 是WSGI/Python web應用程式的支援服務集合,它允許應用程式被”dropping”的動態頁面組合到容器的目錄中,他也自動地包含先進的功能支援像是AJAX、jQueryUI widgets、Flash基本的圖表等等,以及瘋附得文件跟教學文章。
  • XPRESS (1.0 RC3 Released 2009-10-31)是一個用Python寫的開放原始碼的web應用程式架構,它提供了一個有組織的設計跟撰寫一個網站或web應用程式的方法,XPRESS強調安全、速度、簡化、可擴充性。

基本架構

這些專案提供基本的 “應用伺服器”,不是在Apache上就是其他的環境上以自己獨立的程序來執行,在這許多的架構上你可以你自己樣板引擎的選擇跟其他的組件在上面執行,雖然有些架構可能了部份技術堆棧的技術。

  • AppWsgi – 建立你自己的ajax架構以執行在mod_wsgi apache的伺服器上的描述
  • Bobo 是一個輕量級的架構用來建立WSGI web應用程式,它的目標就是容易使用跟記得,它涉及兩個問題: 1) 對應URL到物件以及 2) 呼叫物件來產生HTTP回應,Bobo沒有樣板語言、資料庫整合層或很多由WSGI中介軟體或特定的應用程式函式庫提供的較好的其它的功能,Bobo建構在其它架構上,最著名的有WSGI跟WebOb
  • Bottle 是一種快速和簡單的微架構,為小型網路應用程式所用,它提供有url參數支援的請求派送(路由) 、樣板、鍵/值資料庫、內建HTTP伺服器跟許多第三方WSGI/HTTP-伺服器跟樣板引擎的連接器,所有的功能都在一個檔案裡,沒有跟Python標準函式庫相依的檔案。
  • CherryPy (2010-04-14釋出3.0.4版)是python風格、物件導向的HTTP架構,CherryPy驅動的web應用程式實際上是內嵌在他們自己的多執行緒的web伺服器內的獨立的Python應用程式,TurboGears、web2py (見上面)也使用CherryPy
  • circuits.web (2010-02-01釋出1.2.1版) 是一個基於事件驅動的輕量級跟高效能的HTTP/WSGI架構的組件,cuits.web跟CherryPy(見上述)有相似的功能,像是CherryPy的URL對映,circuits.web應用程式是獨立的應用程式具有高效能、多執行緒的web伺服器跟同時強大的可擴展性以及全功能的WSGI支援跟其它web伺服器的發佈。
  • Python Paste (2010-04-30釋出1.7.3.1版) 帶來Python Web 開發跟Web應用程式安裝的一致性,提供開發者跟系統管理的工具,另外Pylons (見上述)是建構在Paste之上。
  • PyWebLib (1.3.4) – 提供表單跟sessions的支援;用於實作web2ldap
  • WebStack (2007-10-29釋出1.2.7版) – 很輕量級,在功能比較上需要額外的技術層(像是XSLTools及其它)來配合全棧式架構。

提供樣板的基本架構

  • Albatross (2010-03-15釋出1.4版) 一個小且具彈性的Python工具包用來開發高度狀態化的Web應用程式。
  • Aquarium (2007-01-01釋出2.3版) 提供方便的函式庫、跟Cheetah緊密的結合,不同Web環境的連接器
  • Divmod Nevow (2009-11-25釋出0.10.0版) 一個完善的函式庫包括鼓勵應用跟邏輯表示層分離的資源模式、支援設計者友善的XHTML樣板跟純Pyton樣板的標記系統,跟一個強大的AJAX的API (Divmod Athena),這個API以結構化的方法支援高度動態Web網頁的建構。
  • JOTWeb2 (2005-12-30釋出1.10版) 使用HTML跟TAL/TALES/METAL 模板來開發動態Web應用程式
  • Python Servlet Engine (2008/01/19釋出4.0.0beta02) PSE剖析你的樣板到二進位編譯的”servlets”來產生執行快速的Web頁面。
  • Quixote (2007-11-16釋出2.5版) 允許開發者開發動態網站大部分盡可能地使用現有的Python知識
  • repoze.bfg (2010-07-03釋出1.3a4版) 一個小型、快速、扎實的開放原始碼web開發架構,它讓真實世界的web應用程式的開發及佈署更有趣、更能預測以及更具生產力。
  • Spark (2006-9-15釋出0.2.1版) 快速輕量級的Web工具,支援mod_python、WSGI跟Twisted。 (2010-03-15,網站有一週以上沒有回應,看起來是死了)。
  • Spiked (2010-01-23釋出0.1.3版) – 建置在Twisted跟Cheetah之上的web開發架構。
  • Wasp (2007.07釋出2.00版) – 支援命令列、CGI跟內嵌web伺服器模式,具有模板、session機制跟其它模組,強調易用性和熟悉的範例。 (2010-03-15,網站表示它不再更新,”我很抱歉WASP將不再回來,我只是沒有在這個冒險上,來看看我如何向我的碩士學位努力…”)

停用的架構

下面的架構不是停用,他們的開發者已經說明不再維護程式碼,就是看起來已經沒有再開發或維護,在他們的網站上專案已經很久沒有更新。

  • 4Suite (伺服器產品似乎常沒有更新而且網站常常掛掉)
  • Crusader 是一個功能強大的Python應用伺服器基於一個可延伸、可擴展和易於使用的一般用途得伺服器架構。
  • Cymbeline (2005-12-09釋出1.3.1版) 一個應用伺服器架構,包括了像是DB跟任意物件池、Web伺服器、持久化物件庫跟文字控制台等功能。
  • maki (開發者不再使用這個產品)
  • Python Server Pages,或PSP (從1999開始舊的Web站台)
  • Snakelets (2008-10釋出1.50版) 容易使用的Python Web應用程式伺服器,自從1.50版釋出後就沒有繼續了。

書籍跟文章

  • Steve Holden寫了一本關於Python Web Programming的書,這本書來自John Goerzen的Foundations of Python Network Programming有簡體中譯本,也很有用,歐萊禮的Programming Python 3rd Edition(有繁體中譯本)有500頁是在寫關於Internet的程式設計,包括250頁的Web指令碼,最後檢視Wesley Chun的Core Python Programming的Web Programming這一章節 — 也有一些部份在討論Web API。
  • Developing With Mod_Python – 一篇關於Mod_Python programming的文章有Cheetah樣板跟MySQL,包含的程式碼範例。
  • Zope 3 Quick Start Guide 提供了Zope 3簡短介紹。

編輯手記

上面的列表應該可以用字母順序來安排 – 在新的解決方案增加時請反應這一點,在指定釋出日期時請使用格式YYYY-MM-DD。

對那些想要宣傳並貢獻此頁的人來說特別值得一提的是在”重組”內容時:

  • 不要移除編輯者的原則:當人們這樣做時不只表示他們不關心這樣的原則,而且也要讓人相信這一頁從來沒有任何的結構或目標。
  • 假如你必須改變這一頁所用的分類,至少嘗試指派所有的架構到有意義的分類,不要為了提昇某個專案的簡介而另外發明特殊的分類,不要合併分類並且將架構放到雜項分類中。
  • 不要新增連結到專案中,除非他們是Web架構,相反地,使用WebComponentsWebServersTemplating這幾頁,或任何跟WebProgramming相關的頁面。
  • 有些架構不再積極開發或維護,不要沒有事先任何地調查就只是把紀錄移到”停用的架構”這一節裡。

一些基本的編輯建議:再編輯的時候使用預覽按鈕,而不是留下很多小變更在歷史紀錄中。

ㄚ琪的話,這一篇翻了很久,在翻譯期間有更新了不少,目前的截止日期為2010/07/13,如果有更進一步更新,煩請提供訊息,我再補充進來!

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *