會了django還有必要學flask嗎?
說下情況吧,本人python一年的經驗,上個月學django,基本也可以做一個博客了,但是感覺速度很慢,網上看了下有人說django的性能不行~~~
現在django基本上滿足我的需求,但是又看到有人介紹flask,看了下他的模板語法,感覺也是相當強大!!我想問下,如果我是以做網站快速為主,以後接客戶也用python來做網站的話,在這種情況下,有必要轉flaks嗎?如果要轉的話,大概多久能轉型成功?
速度慢不一定是框架的問題,我按一般新手遇到性能問題的順序列舉一下:
讀寫問題
SERVER &<-&> 資料庫
- 有沒有選擇合適的資料庫?
- 資料庫索引有建嗎?
- 有緩存(頁面緩存/key-value緩存)嗎?
既然你用過 django,如何實現頁面緩存:
from django.views.decorators.cache import cache_page
@cache_page(60 * 5)
def balabala(request):
return render(request, "home/user_list.html")
小改動,秒開頁面(用之前先了解下優缺點)
有一個 Django 的 package,可以幫你找出執行慢的 SQL 語句:
GitHub - edoburu/django-debugtools: A toolbox of small utilities to assist Django development
瀏覽器 &<- SERVER
- 有沒有使用 gzip 壓縮
- 前端組件有沒有使用 CDN
代碼問題
(其實這點影響並不大)這個就考驗 Python 功底了,寫兩個最常見的:
循環
1. 使用 xrange
等生成器(了解下 yield
關鍵字)
2. 請求或者操作能放到循環外邊 O(1)
,絕對不放裡面 O(n)
,比如:
lowerlist = ["this", "is", "lowercase"]
upper = str.upper
upperlist = []
append = upperlist.append
for word in lowerlist:
append(upper(word))
# python2
print upperlist
# python3
print(upperlist)
# Output = ["THIS", "IS", "LOWERCASE"]
3. 減少或者不使用多層循環等(基本功)
排序
- 根據場景使用最適合的排序演算法
- 盡量使用sort等內置方法,例如
框架問題
- 沒有不行,只有不適合,沒有全能的框架
- 框架解決了什麼?為了快速解決一類問題,所以不同場景不可能用一個框架解決
以下都有使用:
AngularJS,ReactJS,VueJS(前端 MVVM 框架,特別適合單頁面應用)
NodeJS(非阻塞 Web 框架)
Django,Flask,Tonado(Python Web 框架)
因為業務場景換,可以,沒問題,選最適合的嘛,但是沒必要因為速度換,你換了 Flask 該慢的還是慢
在運維部門做研發是什麼樣的體驗!? - 臨書的回答 - 知乎
學Python web開發框架到什麼程度可以找到開發的工作? - 臨書的回答 - 知乎
我的知乎 · 我的專欄 · 我的 GitHub
怎麼說呢……從快速構建的角度看呢,flask講道理比django快。但是這個快是建立在你真的對http以及python和對應的模塊夠了解到前提上。
至於性能……django性能是比flask差一點,沒差到特別多。最重要的一點是,這個效率根本從來不是小站點的關鍵問題。到底哪家會窮到必須要單台伺服器支撐5k並發?有那個流量早加機器了好么……高性能相反是為流量大到很極端的狀況以至於加機器都不划算的地步了才有需求的,又或者是必須維持一堆長鏈接。然而這都不是flask與django能夠直接做到的。
再說學習,你要真會python,會看文檔,懂HTTP的話,根本啥框架都不會是問題的,上手寫個項目就成了……你意思是你準備靠Django吃飯做到65歲退休?這輩子不學別的了?
……IT業你一旦停下學習的腳步就是被業界淘汰的時候。現在學Flask,我都覺得晚了,那麼多新的框架可以學,bottle啊,aiohttp啊,等你的競爭對手都用上最新框架最新特性的時候,你還用一個十年前的框架做出來的東西,想賣給誰?django 也是可以使用 jinja2 的模板引擎的。與其花時間切換 flask ,不如深入了解 django 。況且目前 django 的生態系統也比 flask 要好。
不管先學django,還是flask,如果真的是學會了,基本上另外一個也會了。
看到會這個字,我就開始顫抖…
看你怎麼定義會了,我問幾個:
描述一個http請求到響應的全過程。middleware是什麼,可以做什麼?Django的orm,F和Q聽說過嗎?做什麼用的?aggregate呢?class based view聽說過嗎,mixin聽說過嗎?自定義標籤怎麼用?Django的單元測試用過嗎?
自定義manage命令用過嗎?secret key是幹什麼用的?(GitHub上一堆項目直接暴露了secret key)如果上述問題都能說個大概出來,那你不管用什麼web框架都不會有大問題。我不理解你為什麼要問這個問題,學一個框架不是很容嘛?當然要都看都用才能比較鑒別,有時間在這裡問不如自己去試。
你這個會是指會寫一點吧~我覺得會的基礎是你指掌握所有的django的運行的原理。所以還是先把django學會了在搞其他的,一般學會django和python3 還有django的一些生態,等等,一般要個一年多積累。所以我覺得還是學會django所有的東西,再換框架會比較好點。
如果樓主要做大點的項目,還是選擇Java 比較好,企業級的開發,穩定。但是我覺得沒有到百萬以上的用戶量,不值得換java做。
應該學習。flask讓你對整個框架的運作更加了解了。未來你可以使用flask作為主要框架使用。
話說這兩個框架的模板語法差別大嗎……
你如果能把網站很慢的原因找到,然後優化一下,我估計你就不會說自己學「會」django了
都學一下
又不難..
django封裝的很重,我目前是一邊進階python,一邊深入Django。web框架核心的東西都那麼多,路由,靜態文件處理,模板引擎,一堆。你都搞徹底的了?
推薦閱讀:
※學習python有什麼好的視頻?
※請問有哪些優秀Python課程推薦?
※如何寫python2和3兼容代碼?
※如何爬取知乎的ajax內容?
※使用 Python 寫一個搶課用的軟體,卡在了取課表這一步,怎麼辦?