標籤:

Python編程(b三):Python之MVC

很大程度上,web開發的模式演進路線和桌面UI的演進歷史驚人的重合: 最開始,CGI拼字元串;對應桌面程序的console界面時代。 後來web開發開始MVC化,也基本上是借鑒桌面GUI開發時的資料庫封裝(Model),布局文件(View),業務邏輯(Control)。 後來web開發越來越注重用戶的實時交互,從而變得富JavaScript化。個人感覺和桌面GUI庫中的callback化很類似。

web開發以後的趨勢應該是「控制項化」,前後端的界限會變得模糊,可能會出現一套包含前後端的控制項庫。 比如一個登陸框,會抽象成一個類,裡面包含了各種參數化的界面,動畫,後端資料庫映射,異常處理等等。 感覺RoR(Ruby on Rails)就有點這種發展趨勢。

Python的web框架是非常非常之多的,這說明用Python開發web應用是非常流行的,但這也說明了一個 可悲的問題:Python不像Ruby那樣有一個Rails似的一統天下的框架,我也經常被初學者問起Python web開發哪家強之類的問題。

Python Web框架一覽:

WebFrameworks

但平時工作和技術交流過程中我們發現,常用的Python web開發框架還是比較固定的

這裡我分兩大類講

  • 大而全的框架

    • Django,這個應該是現在Python界名氣最大的開發框架了,真正的全功能。有個小tips,Django這個 單詞,D是不發音的,所以這個單子發音大概是「堅狗」,不是「帝堅狗」。Django在實際的大型網站項目中 應用的也是比較少的,也是由於「樣樣行,樣樣都不精」。但值得一提的是Django裡面有個django-admin 模塊,可以用這個模塊快速的開發出界面很炫酷的系統,一個朋友在這個模塊上深度開發了一個項目,可以 供大家參考學習:sshwsfc/django-xadmin · GitHub

      • 官網


        The Web framework for perfectionists with deadlines

      • Hello World


        稍微有點複雜,要配置route等。 詳情請見:Django documentation

    • web2py,這個框架由於Django的出現,現在逐漸式微了。

  • 輕量級框架

    • web.py,這個框架是個有故事的框架。它的作者是天才Aaron Swartz,這個也是曾經最為流行的 Python輕量級web框架,但由於2013年作者自殺身亡後就基本停止更新了,現在用的人也逐漸變少了。

      我認為還是有必要介紹一下它的作者,一個我很崇拜的人:

      有一部關於他的紀錄片,《互聯網之子》 《The Internets Own Boy: The Story of Aaron Swartz》 (2014)。 地址: 互聯網之子 (豆瓣)

      2013年1月11日,美國程序員、作家、政治活動組織者、互聯網活動家Aaron H. Swartz在紐約自殺身亡,享年26歲。

      Swartz出生於1986年,在14歲時,就已經加入W3C RDF核心工作組。在麻省理工學院,他與Web發明人Tim Berners-Lee一起工作,並協助開發並傳播了Web上數據共享的標準,他與其他人聯合寫就了目前廣泛使用的RSS 1.0規範。他是markdown的聯合創始人,還是知名社會化新聞站點Reddit的三個擁有者之一,他還創造了python web應用框架web.py。

      Swartz曾在Stanford讀過一年,然後主動退學,創立公司Infogami,該公司受到Y Combinator首次Summer Founders Program資助。

      2007年,他領導非盈利組織Open Library的創立,該組織意將世界上所有曾經出版過的書的信息都收集起來。

      此後,Swartz在哈佛道德中心實驗室(Harvards Ethics Center Lab)完成了一個研究生獎學金,研究制度腐敗(Instutional Corruption)。在2010年,他創建了DemandProgress.org,發起運動「反抗互聯網審查法案SOPA/PIPA」。

      2011年7月,美國聯邦大陪審團起訴Swartz,罪名是他從JSTOR在線雜誌檔案系統上下載了海量學術性文檔,並大量散發。此後,他為Avaaz基金會工作,這是一家非盈利性組織,致力於「全球web運動,將人民群眾的力量帶入到政府決策過程中」。

    • Flask,中文的意思是「燒瓶」。首先,我們需要明確一個概念,「輕量級」不代表功能簡陋,而是設計思想。 一切MVC組件都是可替換的。其默認 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2。正因為良 好的擴展性,Flask也被稱為 「microframework」 ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的資料庫、窗體驗證工具。然而,Flask保留了擴增的彈性,可以用 Flask-extension加入這些功能:ORM、窗體驗證工具、文件上傳、各種開放式身份驗證技術。

      • 官網


        Welcome | Flask (A Python Microframework)

      • 安裝


        pip install Flask

      • Hello World

      from flask import Flasknapp = Flask(__name__)nn@app.route("/")ndef hello():n return "Hello World!"nnif __name__ == "__main__":n app.run()n

    • Bottle,中文的意思是「瓶子」。這個框架和Flask十分的的相似,相似到很多場景下把import Flask 直接改為 import bottle就能直接切換框架。但這連個框架的設計思想相差很多:


      Flask傾向於用已有的開源框架來「拼湊」出一個完整的框架,例如Werkzeug、Jinja2。避免 重複造輪子;而Bottle的作者似乎比較堅持,自己寫的東西才有更好的可控性,作者也對「單文件」 的實現十分的堅持。

    我個人比較喜歡Flask的方式,Flask也的確展示出了極強的可變行,如果你想將默認的模版引擎從Jinja2替換成Mako,你甚至都不用引入任何其它的擴展。

更多精彩,請見 Reboot教育 - 高效你的學習


推薦閱讀:

MVC 模式的原理,它在 Android 中是如何運用的?
zencart 這個國外商城 CMS 源碼寫得怎樣?
NodeJS的MVC是如何工作的?
asp.net mvc 4 模型層為什麼可以通過簡單的 {get;set}就可以對數據進行設置和取得 這其中的實現原理是什麼?

TAG:MVC | Python |