超小團隊選擇django還是flask?
題主的情況是這樣
,題主是一名大學生,想幫自己的社團寫一個主頁app承載社團申請,社團blog,社團信息服務,留言板等功能,題主的技術情況是前後端都懂一點,前端是使用bootstrap及各式模板套上jQuery和angularjs(做提交表單可視化),後端習慣Python,曾經用過Python的django和flask都寫過很多練習,但沒怎麼做過項目,所以問題是,後端只有我一個人,那麼我是應該選擇大而全的django還是短小精悍的flask再套上一堆flaskext,哪一個對像我這樣的情況比較適合維護(部署在阿里雲上面)
我給你的建議是angular/react做前端且做到前後分離不去碰模板而頁面直接靜態路由,然後用django的可能是最方便最不用鳥細節的ORM+admin組合做RESTful API。
當然是django.
我們團隊也是曾經糾結過這個問題,當時選擇了flask+mongoDB,但是現在來看的話,其實用django+sqlite會更合適一些。
django是一個很重的框架,flask是一個很輕的框架,django提供了很多很方便的工具,對很多東西也做了封裝(比如models,users,authentication)。django提供的是一套設計模式,按照這個思路去做可以很省力。而且,django的官方文檔相當詳盡。自學的話直接照著官網上的tutorial動手試一試就可以很快的入門。
正如它的slogan所言,快速項目開發,django的確是利器。然而,框架重了,幫你做的事情多了,自然也就降低了你開發的自由度。相比之下,flask的可定製度會更高一些,你可以按照自己的模式來做開發。
如果是小團隊,做的也是一些比較「常規」的項目,而且希望項目能夠快速開發,快速迭代,那麼試一試django,應該不會後悔。這個問題可以從三方面來思考,時間成本,系統功能,用戶期望。時間成本嚴重依賴框架和個人掌握程度,flask靈活,但本身提供的功能較少,Django雖然複雜些,但功能豐富,自帶的admin非常方便,結合ueditor可以直接做管理後台來發布博客和對內容進行管理。系統功能本身沒有複雜的地方,flask和Django都很容易實現。但別忘了,Django的admin可是能省去你很多事情哦。用戶期望是什麼呢?他們會在乎你用什麼技術嗎?他們想要的是一個產品,而不是你用了哪些技術?如果你能在短時間內滿足他們的需求他們就會比較滿意。這個小項目大部分都是你一個人做吧,那相當於自己就是產品經理和程序猿了,不要讓自己的思維局限在自己只是程序員的角度去思考,會讓自己的選擇更清晰。
這個問題很久以前回答的,沒想到還會有人點贊。
繼續寫點東西
目前公司,我們在管理後台上,使用了flask。
在交易系統上使用了tornado。
如果想加深學習python,建議使用flask,如果僅僅是為了完成任務,使用django
以下是個人學習經驗
1.當時也是給社團做網,遇到的問題的特別多,但是django都能找到直接可用的代碼,所以對自己加深python的理解一點好處都沒有
2.後來學習flask,很多東西你都要從頭構建,慢慢的就會遇到很多問題,比如數據問題,比如一些第三方插件,這些問題你會遇到,並且可以快速的解決,對於綜合知識的提高,有大的好處。
3.當對flask和如何構建一個web系統理解之後,可以嘗試使用tornado,會加深你對非同步編程的理解
4. 當然能解決問題的辦法就是好辦法。所以目的優先動機。開始寫代碼,完成自己工作。
推薦Django。Flask很多插件都有大坑。Django相比提供了整套的解決方案,而且坑相比不是那麼大。
小馬過河,不同老馬給出不同答案。既然Django/Flask都熟悉,那麼面向項目就是Django了,而且需求本身和D比較相符。
我現在開發IoT,切割成兩部分:IoTHub(by Twisted/Cyclone),AppWebServer(by Flask/F.A.B)。主要因為連接部分需要穩定,而應用部分需要迭代。兩者混在一起很LOW。不過我不排除App改為Golang/Node.js來改。
其實Tornado可以覆蓋Twisted/Cyclone,但是我也沒有改的想法。熟悉就好了。在沒有使用任何加速技術上,非同步框架果然就是比同步框架要快許多。
我覺得Django挺好開發的,我開發了一個超小型網站使用的就是django。
flask沒用過所以不是很清楚。但是django配合模板系統是很好用的,雖然模板系統只能實現一些非常有限的功能。但是好像django的並發特別蛋疼。默默地放一個django的網頁acm.kidozh.com,這個架在sae上,目前運行的還是滿足我的要求的。。。推薦後端tornado,前端bootstrapbtw,知乎用的就是tornado
Bottle: Python Web Framework
Bottle is a fast, simple and lightweight WSGI micro web-framework for Python. It is distributed as a single file module and has no dependencies other than the Python Standard Library.
適合小項目快速原型。
先說本人做過的網站吧,django開發的文章_麥子圈 mvc三層幾乎都是由我一個人實現的,再說我的答案:強烈推薦flask。為什麼?flask擁有豐富的第三方插件不需要自己造輪子,本身構造以及組織形式就是為小規模開發設計的。django用就得用一套,模板引擎以及orm都是不可替換的,只有用過的人才知道django的模板引擎有多坑,隨便舉一例,百度「django 模板 四則運算」,看看django下模板的四則運算是如何完成的。再看看flask使用的jinja,jinja對於flask來說是個特例,在flask幾乎沒有什麼不可替換的組件里,jinja是好像是唯一一個不可替換組件,但是他比django的模板引擎強大多了,django中模板不能給需要參數的函數傳參,加減法也十分困難,在jinja下,一切不是問題。再說組織結構,django的文件組織結構的確有板有眼十分嚴謹,對於大型項目來說的確十分收益,但是對於超小團隊的小型項目,過度的約束反而會拖慢開發進度。對於flask,只要你願意,單文件,五十行就能搞定一個小站。
django的優勢在哪呢?組織結構嚴謹,不會給接下來的擴展留坑,所有組件都由框架來實現,配套使用有一些非常爽的特性,比如modelform這種東西真是讓人眼前一亮。但是這些特性對於一個小型項目來說我覺得並沒有多大幫助,有時反而會變成累贅。
上面很多說,小項目用輕框架的,說難聽點就是誤人子弟!框架輕或重,跟開發者有什麼關係?軟硬體或者需求上有限制,沒辦法的情況下,才會用輕的框架,或者自己寫框架。為什麼?因為功能受限或者需要自定義的功能啊!你這種小項目,當然是越重越大的框架越好啊!樓上說的很對!千萬不要造車輪!完全是浪費時間!還有說造車輪學東西的。呵呵!你學一輩子東西吧!
HIT-MSTC/mstc-website · GitHub
我們社團的網站~用django和metro ui做的~感興趣的話你可以看一下~上面是源碼。。
具體的地址在這裡:http://hitmstc.sinaapp.com回答裡面竟然還有提node.js的我推薦用bottle
Django vs Flask Worksheet ?? WakaTime
用tornado吧,Django或flask和tornado這種完整的web伺服器相比,真是太low了
flask曲線平緩
作為一個本科期間做過大大小小無數網站的人,推薦Django。一招滿足你所有需求。
Django可以說是上手最快的框架之一,而且前中後期都適用。Yelp的後端就是基於Django的這種事情我會亂說?多數人都覺得功能越多的框架做東西越快,我確認為相反。比如騎自行車和摩托車,還是自行車容易上手。我做伺服器就討厭一上來拿出一堆框架,很高深的樣子,其實用的太多會很難把握,比如做個排名,需要緩存,自己寫一個一兩天的事,非要搞個redis,搭建就得一兩天,後期還會出bug啊,redis的維護啊種種問題,很難控制。當然了,如果團隊成熟,各個模塊獨立,那倒是可以。(解釋下,不是redis不好,而是要權衡利弊,這裡也是舉例,不是針對)
基於上述理由,我更喜歡自己一步步來自己做一套東西,一個模塊一個模塊的往上加(也包含一些開源庫之類的),最後做完整個項目,時間看似較長,實際上並不一定,而且出了任何問題都能快速定位。而買一套功能強大完善的框架來用的話,往往出了問題就無從下手,因為越完善的東西流程邏輯越複雜越難看懂。
所以我選的話,我更喜歡flask,一個是以上的利弊、另一個是個人興趣吧(或者被高大上複雜的東西摧殘壞了)。
另外很多人說人生苦短,那為何不儘早的對整個體系有一個原理性的掌握,而非要去快速的追求功能呢?多數時候,一味的追求功能的快速實現反而是對未來時間的提前支配,而且代價很大。所以不管用什麼框架,都要有個把握比較好。
用flask+sqlite,參考《flask web開發》來寫,一步步寫出來,時間上很快。
關鍵是,由於框架輕,你想要擴展網站時,你再去搞懂擴展模塊。對於擴展模塊不了解,看文檔或看源碼都不是問題。
小的項目,我喜歡把所有代碼都放在一個文件里。類都放models里,路由控制都view里,表單都在form里,非常方便。
你可以看看我一個人做的一個開放教育服務平台:517上課(http://517shangke.com)。
推薦閱讀: