Python編程(三):Python之MVC

這裏寫圖片描述
著作權歸作者所有。
本文已獲得作者授權,非商業轉載請註明出處。
作者:auxten
鏈接:http://zhuanlan.zhihu.com/auxten/20171274
來源:知乎

很大程度上,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 Internet’s 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在哈佛道德中心實驗室(Harvard’s 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 Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()
  • Bottle,中文的意思是“瓶子”。這個框架和Flask十分的的相似,相似到很多場景下把import Flask 直接改爲 import bottle就能直接切換框架。但這連個框架的設計思想相差很多:

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章