IT語境中的框架,特指爲解決一個開放性問題而設計的具備必定約束性的支撐結構。在此結構上能夠根據具體問題擴展、安插更多的組成部分,從而更迅速和方便地構建完整的解決問題的方案。 ————補充解釋———— 也就是說:
1)框架自己通常不完整到能夠解決特定問題;
2)框架天生就是爲擴展而設計的;
3)框架裏面能夠爲後續擴展的組件提供不少輔助性、支撐性的方便易用的實用工具(utilities),也就是說框架時常配套了一些幫助解決某類問題的庫(libraries)或工具(tools)。 約束性:針對解決特定問題的軟件框架會首先定義問題的邊界,進而將相關的軟件組件約束在這個邊界內,保持框架在解決問題方面上的內聚性。
咱們是因爲效率和易用性的考慮才產生框架。框架能節省開發時間。框架強制使用公共的約定,所以它能有效地解決一些共有的問題,好比頁面渲染,assert判斷,安全或者應用配置等。
這些共有的問題有個共通的特性是會在每一個web應用上都用到。
框架是很是好的,它能讓決定更連貫。框架能避免咱們寫一大堆自定義模塊來實現這些性能,咱們所須要作的就是將這些共用模塊放在框架中實現。框架節省了咱們很多的時間和精力,而且
讓擴展變得更容易。可是這也是問題的根本所在。
15個最受歡迎的Python開源框架(轉載)php
1、Django: Python Web應用開發框架 Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MVC的軟件設計模式,即模型M,視圖V和控制器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容爲主的網站的, 便是CMS(內容管理系統)軟件。並於2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。 Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理後臺:只須要使用起ORM,作簡單的對象定義,它就能自動生成數據庫結構、以及全功能的管理後臺。 Django提供的方便,也意味着Django內置的ORM跟框架內的其餘模塊耦合程度高。應用程序必須使用Django內置的ORM,不然就不能享受到框架內提供的種種基於其ORM的便利;理論上能夠切換掉其ORM模塊, 但這就至關於要把裝修完畢的房子拆除從新裝修,倒不如一開始就去毛胚房作全新的裝修。Django的賣點是超高的開發效率,其性能擴展有限;採用Django的項目,在流量達到必定規模後,都須要對其進行重構,才能知足性能的要求。 2、Diesel:基於Greenlet的事件I/O框架 Diesel提供一個整潔的API來編寫網絡客戶端和服務器。支持TCP和UDP。 你應該使用diesel來編寫你的下一個網絡應用。得益於Python使得diesel語法很是整潔,發展步伐很是迅速。非阻塞I/O使得diesel很是快速而且容易擴展。greenlets使得diesel有了unwind(to(callbacks(no)))。 nose使得測試變得容易。最後,Flask使得你不須要寫一個新的網絡框架來使用diesel。 示例 須要框架項目實戰視頻 + Python學習交流 643692991 3、Flask:一個用Python編寫的輕量級Web應用框架 Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2 模板引擎。 Flask使用BSD受權。 Flask也被稱爲「microframework」,由於它使用簡單的核心,用extension增長其餘功能。 Flask沒有默認使用的數據庫、窗體驗證工具。然而,Flask保留了擴增的彈性,能夠用Flask-extension加入這些功能:ORM、窗體驗證工具、文件上傳、各類開放式身份驗證技術。 Flask 頗有趣 配置簡單 特性 1、內置開發用服務器和debugger 2、集成單元測試(unit testing) 3、RESTful request dispatching 4、使用Jinja2模板引擎 5、支持secure cookies(client side sessions) 6、100% WSGI 1.0兼容 7、Unicode based 8、詳細的文件、教學 9、Google App Engine兼容 10、可用Extensions增長其餘功能 4、Cubes:輕量級Python OLAP框架 Cubes是一個輕量級Python框架,包含OLAP、多維數據分析和瀏覽聚合數據(aggregated data)等工具 Cubes的主要特性之一是它的邏輯模型,抽象物理數據並提供給終端用戶層。 須要框架項目實戰視頻 + Python學習交流 643692991 5、Kartograph.py:創造矢量地圖的輕量級Python框架 Kartograph是一個Python庫,用來爲ESRI生成SVG地圖。Kartograph.py目前仍處於beta階段,你能夠在virtualenv環境下來測試。 6、Pulsar:Python的事件驅動併發框架 Pulsar是一個事件驅動的併發框架,有了pulsar,你能夠寫出在不一樣進程或線程中運行一個或多個活動的異步服務器。 應用 附帶如下功能 1、Socket服務器 2、WSGI服務器 3、JSON-RPC 4、Web Sockets 5、任務隊列 6、Shell 7、測試包 8、django集成 示例 對全部請求都返回「Hello World!」做爲響應 須要框架項目實戰視頻 + Python學習交流 643692991 7、Web2py:全棧式Web框架 Web2py是一個爲Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具備快速、安全以及可移植的數據庫驅動的應用,兼容Google App Engine。 Web2py目錄結構 8、Falcon:構建雲API和網絡應用後端的高性能Python框架 Falcon是一個構建雲API的高性能Python框架,它鼓勵使用REST架構風格,儘量以最少的力氣作最多的事情。 特性 1、經過URI模板和資源類的路由 2、經過請求和響應類訪問headers和bodies 3、經過異常基類響應HTTP錯誤等等 基準測試 須要框架項目實戰視頻 + Python學習交流 643692991 9、Dpark:Python版的Spark DPark是一個基於Mesos的集羣計算框架(cluster computing framework),是Spark的Python實現版本,相似於MapReduce,可是比其更靈活,能夠用Python很是方便地進行分佈式計算,而且提供了更多的功能以便更好 的進行迭代式計算。DPark的計算模型是基於兩個中心思想的:對分佈式數據集的並行計算以及一些有限的能夠在計算過程當中、從不一樣機器訪問的共享變量類型。這個的目標是爲了提供一種相似於global address space programming model的工具,例如OpenMP,可是咱們要求共享變量的類型必須是那些很容易在分佈式系統當中實現的,當前支持的共享變量類型有隻讀的數據和支持一種數據修改方式的累加器(accumulators)。 DPark具備的一個很重要的特性:分佈式的數據集能夠在多個不一樣的並行循環當中被重複利用。這個特性將其與其餘數據流形式的框架例如Hadoop和Dryad區分開來。 示例 一個word counting程序 上面的腳本能夠無修改的在Mesos集羣上運行,只需稍微修改一下命令行參數: 10、Buildbot:基於Python的持續集成測試框架 Buildbot是一個開源框架,能夠自動化軟件構建、測試和發佈等過程。每當代碼有改變,服務器要求不一樣平臺上的客戶端當即進行代碼構建和測試,收集並報告不一樣平臺的構建和測試結果。 須要框架項目實戰視頻 + Python學習交流 643692991 11、Zerorpc:基於ZeroMQ的高性能分佈式RPC框架 Zerorpc是一個基於ZeroMQ和MessagePack開發的遠程過程調用協議(RPC)實現。和 Zerorpc 一塊兒使用的 Service API 被稱爲 zeroservice。Zerorpc 能夠經過編程或命令行方式調用。 它容許你: 1、不用修改代碼便可顯露python模塊 2、經過命令行遠程調用這些模塊 如何把你代碼中的對象暴露爲一個zeroservice? 運行以上代碼,在另外一個終端,嘗試鏈接這個zeroservice 12、Bottle: 微型Python Web框架 Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是由於它只有一個文件,除Python標準庫外,它不依賴於任何第三方模塊。 特性 1、Routing:把請求映射到函數,創建簡潔動態的URLs 2、Templates:採用內置模板引擎,同時還支持 mako, jinja2, cheetah 等第三方模板 3、Utilities:便捷地讀取表單數據、上傳文件、 cookies、HTTP頭信息和其它 HTTP相關的元數據 4、Server:內置HTTP開發服務器,而且支持 paste, fapws3, bjoern, Google App Engine, Cherrypy 或者其它任何WSGI HTTP 服務器 示例 運行上面的代碼,訪問http://localhost:8080/hello/bottle試試。 下載和安裝 經過 或者 安裝最新穩定版,或者下載bottle.py (不穩定)到你的工程目錄。Bottle運行於Python 2.5+ and 3.x環境下。 須要框架項目實戰視頻 + Python學習交流 643692991 十3、Tornado:異步非阻塞IO的Python Web框架 Tornado的全稱是Torado Web Server,從名字上看就可知道它能夠用做Web服務器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了以後便開源了出來。 做爲Web框架,是一個輕量級的Web框架,相似於另外一個Python web 框架Web.py,其擁有異步非阻塞IO的處理方式。 做爲Web服務器,Tornado有較爲出色的抗負載能力,官方用nginx反向代理的方式部署Tornado和其它Python web應用框架進行對比,結果最大瀏覽量超過第二名近40%。 此外,它的源代碼也是Python開發者學習與研究的絕佳材料。 如下是Tornado的Hello World示例程序。 十4、webpy: 輕量級的Python Web框架 webpy的設計理念力求精簡(Keep it simple and powerful),源碼很簡短,只提供一個框架所必須的東西,不依賴大量的第三方模塊,它沒有URL路由、沒有模板也沒有數據庫的訪問。這樣的優勢是, 框架給開發帶來的限制少,能夠根據本身的需求進行定製。缺點就是,不少東西都須要本身親自動手開發。 雖然webpy的做者Aaron H.Swartz,一位偉大的程序員在2013年1月11日自殺身亡,結束了短暫的26年生命。可是,做爲一個開源項目,目前仍是有不少開發者在持續更新。 webpy很是的簡單,語法幾乎跟Python同樣,如下是一個簡單的示例: 須要框架項目實戰視頻 + Python學習交流 643692991 十5、Scrapy:Python的爬蟲框架 網絡爬蟲,是在網上進行數據抓取的程序,使用它可以抓取特定網頁的HTML數據。雖然咱們利用一些庫開發一個爬蟲程序,可是使用框架能夠大大提升效率,縮短開發時間。Scrapy是一個使用Python編寫的, 輕量級的,簡單輕巧,而且使用起來很是的方便。 Scrapy使用了Twisted異步網絡庫來處理網絡通信。總體架構大體以下(注:圖片來自互聯網): Scrapy主要包括瞭如下組件: 1、引擎,用來處理整個系統的數據流處理,觸發事務。 2、調度器,用來接受引擎發過來的請求,壓入隊列中,並在引擎再次請求的時候返回。 3、下載器,用於下載網頁內容,並將網頁內容返回給蜘蛛。 4、蜘蛛,蜘蛛是主要幹活的,用它來制訂特定域名或網頁的解析規則。 5、項目管道,負責處理有蜘蛛從網頁中抽取的項目,他的主要任務是清晰、驗證和存儲數據。當頁面被蜘蛛解析後,將被髮送到項目管道,並通過幾個特定的次序處理數據。 6、下載器中間件,位於Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請求及響應。 7、蜘蛛中間件,介於Scrapy引擎和蜘蛛之間的鉤子框架,主要工做是處理蜘蛛的響應輸入和請求輸出。 8、調度中間件,介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。 使用Scrapy能夠很方便的完成網上數據的採集工做,它爲咱們完成了大量的工做,而不須要本身費大力氣去開發。
轉載:http://feilong.me/2011/01/talk-about-Python-web-frameworkhtml
說到Web Framework,Ruby的世界Rails一統江湖,而Python則是一個百花齊放的世界,各類micro-framework、framework不計其數,不徹底列表見:python
http://wiki.python.org/moin/WebFrameworksnginx
雖然另外一大腳本語言PHP也有很多框架,但遠沒有Python這麼誇張,也正是由於Python Web Framework(Python Web開發框架,如下簡稱Python框架)太多,程序員
因此在Python社區總有關於Python框架孰優孰劣的話題,討論的時間跨度甚至長達3-5年。web
Python這麼多框架,能挨個玩個遍的人很少,坦白的說我也只稍微接觸過,因此這裏只能淺談一下,歡迎懂行的朋友們補充。數據庫
Djangodjango
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模板的比較有意思的文章可供參考:flask
1 http://pydanny.blogspot.com/2010/12/stupid-template-languages.html(需FQ) 2 http://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
除了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 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框架的表明,挺有意思的是都採用了decorator的方式配置URL路由,如:
from bottle import route, run @route('/:name') def index(name='World'): return '<b>Hello %s!</b>' % name run(host='localhost', port=8080)
Bottle、Flask跟web.py同樣,都很是精簡,Bottle甚至全部的代碼都在那一個兩千來行的.py文件裏。另外Flask和Pylons同樣,能夠跟Jinja二、SQLAlchemy之類結合的很好。
不過目前無論是Bottle仍是Flask成功案例都還不多。
之因此要特別說一下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根本就不用太在乎性能問題,流量上去了花點錢買點服務器空間好了, 簡單快速的解決性能問題。