學(xué)習(xí)任何一門開發(fā)語言都離不開框架,一個框架就好比是一個毛坯房酪夷,只需要我們裝修就可以入住榴啸。如果沒有框架我們就只能一磚一瓦的去蓋樓房了⊥砹耄框架的種類很多鸥印,具體選擇要根據(jù)實際的業(yè)務(wù)情況。下面就簡單的介紹一下Python七款開源框架的優(yōu)劣。
Django
Django 應(yīng)該是最出名的Python框架辅甥,GAE甚至Erlang都有框架受它影響酝润。Django是走大而全的方向,它最出名的是其全自動化的管理后臺:只需要使用起ORM璃弄,做簡單的對象定義要销,它就能自動生成數(shù)據(jù)庫結(jié)構(gòu)、以及全功能的管理后臺夏块。
優(yōu)點:
開源框架疏咐,有完美的文檔支持
解決方案眾多,內(nèi)部功能支持較多
優(yōu)雅的URL脐供,完整的路由系統(tǒng)
自助式的后臺管理
缺點:
系統(tǒng)緊耦合浑塞,想用喜歡的第三方庫來代替是非常難的,即使打了一些補(bǔ)丁用上了也會覺得非常別扭政己。
Django自帶的ORM遠(yuǎn)不如SQLAlchemy強(qiáng)大酌壕。
Template功能比較弱,不能插入Python代碼歇由,要寫復(fù)雜一點的邏輯需要另外用Python實現(xiàn) Tag或Filter卵牍。
Flask
Flask是一個用Python編寫的輕量級Web應(yīng)用框架÷倜冢基于Werkzeug WSGI工具箱和Jinja2模板引擎糊昙。Flask也被稱為“microframework”,因為它使用簡單的核心谢谦,用extension增加其他功能释牺。Flask沒有默認(rèn)使用的數(shù) 據(jù)庫、窗體驗證工具回挽。
優(yōu)點:
Flask比Django更靈活没咙,用Flask來構(gòu)建應(yīng)用之前,選擇組件的時候會給開發(fā)者帶來更多的靈活性 厅各,可能有的應(yīng)用場景不適合使用一個標(biāo)準(zhǔn)的ORM(Object-Relational Mapping對象關(guān)聯(lián)映射)镜撩,或者需要與不同的工作流和模板系統(tǒng)交互。
缺點:
Flask只是一個內(nèi)核队塘,默認(rèn)依賴于兩個外部庫:Jinja2 模板引擎和 Werkzeug WSGI 工具集袁梗,其他很多功能都是以擴(kuò)展的形式進(jìn)行嵌入使用。
Scrapy
Scrapy是Python開發(fā)的一個快速憔古、高層次的屏幕抓取和web抓取框架遮怜,用于抓取web站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛鸿市,可以用于數(shù)據(jù)挖掘锯梁、監(jiān)測和自動化測試即碗。
優(yōu)點:
Scrapy是一個功能非常強(qiáng)大的爬蟲框架,它不僅能便捷地構(gòu)建request陌凳,還有強(qiáng)大的selector能夠方便地解析response剥懒,然而它最受歡迎的還是它的性能,既抓取和解析的速度合敦,它的downloader是多線程的初橘,request是異步調(diào)度和處理的。這兩點使它的爬取速度非常之快充岛。
另外還有內(nèi)置的logging保檐,exception,shell等模塊崔梗,為爬取工作帶來了很多便利夜只。
缺點:
scrapy是封裝起來的框架,他包含了下載器蒜魄,解析器扔亥,日志及異常處理,基于多線程权悟, twisted的方式處理砸王,對于固定單個網(wǎng)站的爬取開發(fā),有優(yōu)勢峦阁,但是對于多網(wǎng)站爬取100個網(wǎng)站,并發(fā)及分布式處理方面耘成,不夠靈活榔昔,不便調(diào)整與括展。
Tornado
Tornado是一種 Web 服務(wù)器軟件的開源版本瘪菌。Tornado 和現(xiàn)在的主流 Web 服務(wù)器框架(包括大多數(shù) Python 的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器撒会,而且速度相當(dāng)快。
優(yōu)點:
Tornado擅長為需要嚴(yán)密控制異步網(wǎng)絡(luò)細(xì)節(jié)的應(yīng)用程序提供基礎(chǔ)架構(gòu)师妙。例如诵肛,Tornado不僅提供內(nèi)置的異步HTTP服務(wù)器,還提供異步HTTP客戶端默穴。因此怔檩,Tornado非常適合構(gòu)建應(yīng)用程序,例如Web scraper或bot蓄诽,它們并行查詢其他站點并對返回的數(shù)據(jù)進(jìn)行操作薛训。
缺點:
模板和數(shù)據(jù)庫部分有很多第三方的模塊可供選擇,這樣不利于封裝為一個功能模塊仑氛。
Web2py
web2py是一個為Python語言提供的全功能Web應(yīng)用框架乙埃,旨在敏捷快速的開發(fā)Web應(yīng)用闸英,具有快速、安全以及可移植的數(shù)據(jù)庫驅(qū)動的應(yīng)用介袜,兼容 Google App Engine甫何。
優(yōu)點:
Web2py最大的吸引力在于其內(nèi)置的開發(fā)環(huán)境。當(dāng)設(shè)置Web2py實例時遇伞,將獲得一個Web界面沛豌,實際上是一個在線Python應(yīng)用程序編輯器,可以在其中配置應(yīng)用程序的組件赃额。這通常意味著創(chuàng)建模型加派,視圖和控制器,每個都通過Python模塊或HTML模板進(jìn)行描述跳芳。
缺點:
Web2py的一個重要限制是它僅與Python 2.x兼容芍锦。首先這意味著Web2py無法使用Python 3的異步語法。如果你依賴于Python3獨有的外部庫飞盆,那么你就不走運(yùn)了娄琉。但是,正在開展使Web2py Python3兼容的工作吓歇,并且在撰寫本文時它已接近完成孽水。
Weppy
Weppy感覺就像Flask的簡約風(fēng)格和Django的完整性之間的中間標(biāo)記。雖然開發(fā)Weppy應(yīng)用程序具有Flash的直接性城看,但Weppy具有Django中的許多功能女气,如數(shù)據(jù)層和身份驗證。因此测柠,Weppy適用于從極其簡單到適度復(fù)雜的應(yīng)用程序炼鞠。
優(yōu)點:
Weppy的文檔與框架本身具有相同的風(fēng)格。它干凈轰胁,可讀谒主,并且被人類消費。除了通常的“hello world”應(yīng)用程序示例之外赃阀,它還包含一個很好的演練教程霎肯,可以讓你創(chuàng)建一個微博系統(tǒng)作為初學(xué)者項目。
缺點:
雖然Weppy有一個擴(kuò)展機(jī)制榛斯,但官方批準(zhǔn)的附加組件列表很小观游,遠(yuǎn)小于Flask的擴(kuò)展目錄。
Bottle
Bottle可以被認(rèn)為是一種迷你燒瓶肖抱,因為它比其他“微框架”更加緊湊和簡潔备典。由于其占地面積最小,Bottle非常適合包含在其他項目中或快速交付REST API等小型項目意述。
優(yōu)點:
Bottle不需要像其他框架那樣多的文檔提佣,但文檔絕不是吝嗇吮蛹。所有關(guān)鍵的東西都適合單個(盡管很長)的網(wǎng)頁。除此之外拌屏,還可以找到每個API的完整文檔潮针,如何在各種基礎(chǔ)架構(gòu)上進(jìn)行部署的示例,內(nèi)置模板語言的解釋以及一系列常見配方倚喂。
缺點:
Bottle極簡主義的一個后果是有些功能根本就不存在每篷。不支持表單驗證,包括CSRF保護(hù)等功能端圈。如果要構(gòu)建支持高度用戶交互的Web應(yīng)用程序焦读,則需要自己添加它們。
好了舱权,今天的分享就到這矗晃,如果你對Python感興趣,歡迎加入我們【python學(xué)習(xí)交流裙】宴倍,免費領(lǐng)取學(xué)習(xí)資料和源碼张症。