由於最近開始了一個新的項目cfBlog2,開始對python的web框架進行了一些研究。
因此將一些研究的心得寫在這里,供以后有需要的朋友參考。
Python Web開發的現狀
Python在國內應該是除了PHP以外最流行的開發語言了(在國外的或許ROR能競爭,但在國內估計用的人沒多少)。在PHP的世界里面,有一堆開發框架,有國產的ThinkPHP、YII、CI,稍微新一點的Larvel5,每個都有不少的用戶而且項目的活躍度都不錯。相對來說Python就會略微遜色,名義上是有Django、Flask、Bottle、Pyramid、Web2Py等,但實際真正活躍的卻不多。陣營來說划分還是比較明確:以Django為首的重量級框架和以Bottle、Flask為首的輕量級框架,因此在這里我選擇兩個社區相對活躍的兩個典型作為比較。
Django
Django是基於中間件的一個大型框架。框架本身的內容相當豐富,基礎部分:模版引擎、ORM、表單、路由分發這些標配,還有不少的中間件:登陸、后台管理,這些還是官方中間件,另外還有不少的第三方中間件。關於第三方的我沒有詳細研究過,質量不太好評論。還有由ROR帶起的基於命令的Web開發方式和擴展、還有內建的數據庫遷移,基本上你呢想到的Django都有。可以說Django和Python相當匹配,前者是Web開發的萬金油,后者是開發領域的萬金油。
另外Django這個框架本身還有一個專門的基金會,這個基金會是由Django的母公司成立的,估計有不少用這個框架的公司也對期捐助過。框架本身相當活躍,每隔大概8個月就有一個大版本。
社區也是相當活躍,官方的Community、非官方(StackOverflow)和IRC(據說IRC是比任何一個開源項目都要活躍)基本上你碰到的問題大家都會有解決或者Workout方案。
Flask
FLASK框架本身只包含路由分發,請求和響應的封裝和插件系統,在加上作者自己的Werkzeug(處理WSGI)、jinja2(模板引擎)和Flask-SQLAlchemy擴展(Model層),這幾個同一個作者的項目構成一個完整的MVC框架。
對於Flask本身,一個微框架,這已經足夠了,而且它也只能提供這么多。
如果你需要表單處理,請安裝Flask-WTF;如果你需要基於命令的開發模式,請安裝Flask-Script和Flask-CLI(這是一個Flask1.0的backport模塊);如果你要登陸驗證,請裝Flask-Login;如果你要后台管理,請裝Flask-Admin。什么?!你全部都要?請裝Django。
對Flask就是這么一個框架。這是一個典型的社區項目,作者在實現了一個牛X的核心以后,就撒手交給社區。各個插件的文檔分散(雖然Flask曾經出了一本書,試圖打通各個插件和Flask關系,但是當需要真正使用的時候,查文檔還是需要在不同的Chrome Tab里面切換),而且社區插件的質量、支持和活躍度也需要話很大的力氣去確認。
Flask這個項目毫無疑問是優秀的:完善的官方文檔,詳細的教程(
Flask和Django的應用場景
鑒於Flask和Django的特點,如果你是開發一個REST API的系統,沒有復雜的分層和邏輯的話,Flask會是一個不錯的選擇,因為框架內建的功能已經足夠你完成這個任務;又或者,你是打算實現一個大型的系統,需要自己重新實現大部分插件的內容,Flask也還是不錯,因為它足夠的簡單,能讓你快速的讀懂和擴展。
其他的情況我還是推薦你用回Django。尤其是當你需要安裝大量的Flask插件,去實現Django本來就有的功能時,你就應該意識到你需要放棄Flask。
當然這只是個人的看法,也沒有絕對這一說,主要還是看你想在框架上花費多少的時間。
