Python的Web開發,也是工作崗位比較多的領域。如果你對Python的Web開發有興趣,正打算開始學習使用Python做Web開發等,那麼學習一門基于Python的Web開發架構是必修課。
Python作為目前最熱門,也是最主要的Web開發語言之一,在其二十多年的曆史中出現了數十種Web架構,比如Django、Tornado和Flask等,它們有的曆史悠久,有的發展迅速,還有的已經停止維護。
一、基于Python的代表性Web架構
下面是一些比較有代表性的架構:
Django:
Python 界最全能的 Web 開發架構,battery-include 各種功能完備,可維護性和開發速度一級棒。常有人說 Django 慢,其實主要慢在 Django ORM 與資料庫的互動上,是以是否選用 Django,取決于項目對資料庫互動的要求以及各種優化。而對于 Django 的同步特性導緻吞吐量小的問題,其實可以通過 Celery 等解決,倒不是一個根本問題。Django 的項目代表:Instagram,Guardian。
Tornado:
天生異步,性能強悍是 Tornado 的名片,然而 Tornado 相比 Django 是較為原始的架構,諸多内容需要自己去處理。當然,随着項目越來越大,架構能夠提供的功能占比越來越小,更多的内容需要團隊自己去實作,而大項目往往需要性能的保證,這時候 Tornado 就是比較好的選擇。Tornado項目代表:知乎。
Flask:
微架構的典範,号稱 Python 代碼寫得最好的項目之一。Flask 的靈活性,也是雙刃劍:能用好 Flask 的,可以做成 Pinterest,用不好就是災難(顯然對任何架構都是這樣)。Flask 雖然是微架構,但是也可以做成規模化的 Flask。加上 Flask 可以自由選擇自己的資料庫互動元件(通常是 Flask-SQLAlchemy),而且加上 celery +redis 等異步特性以後,Flask 的性能相對 Tornado 也不逞多讓,也許Flask 的靈活性可能是某些團隊更需要的。
二、選擇架構的建議
這麼多的Web架構,我們沒有那麼多的精力全都學一遍,也不可能全部精通,必然要有所取舍,那麼該如何選擇呢?有哪些可以參考的原則呢?
下面的建議不一定正确,但可以作為參考:
· 選擇更主流的架構。因為它們的文檔更齊全,技術積累更多,社群更繁盛,能得到更好的幫助和支援。
· 選擇更活躍的架構。關注項目在GitHub等環境中的更新頻率、Issue和Pull Request的響應情況。如果一個項目長期沒有更新,或者有一堆的問題需要解決但是沒有得到響應,就不應該是你學習的對象。
· 選擇能夠滿足需求的架構。沒有最好的架構,隻有更合适的架構。你所選擇的Web架構不僅需要滿足目前的需求,還要充分考慮項目發展一段時間後的情況,即前瞻性,避免盲目選擇而導緻将來推倒重來的情況。
· 選擇時效性好的架構。在學習和使用架構的時候經常需要查閱和參考各種網絡上的文章、部落格和教程,但是需要注意他們的發表時間。有些架構的相關文章已經很老了,很久沒更新了,應該放棄這種架構;有的架構一直以來都有不斷的新文章、新部落格出現,就是比較不錯的選擇。
· 選擇入門友好的架構。這條隻對新手适用。詳細的架構文檔、官方教程對新手來說都是極大的幫助和鼓勵。
三、為什麼推薦Django架構?
Django具有以下特點:
· 功能完善、要素齊全:該有的、可以沒有的都有,自帶大量常用工具和架構,無須你自定義、組合、增删及修改。
· 完善的文檔:經過十多年的發展和完善,Django有廣泛的實踐案例和完善的線上文檔。開發者遇到問題時可以搜尋線上文檔尋求解決方案。
· 強大的資料庫通路元件:Django的Model層自帶資料庫ORM元件,使得開發者無須學習其他資料庫通路技術(SQL、pymysql、SQLALchemy等)。
· 靈活的URL映射:Django使用正規表達式管理URL映射,靈活性高。新版的2.0,進一步提高了URL編寫的優雅性。
· 豐富的Template模闆語言:類似jinjia模闆語言,不但原生功能豐富,還可以自定義模闆标簽,并且與其ORM的用法非常相似。
· 自帶背景管理系統admin:隻需要通過簡單的幾行配置和代碼就可以實作一個完整的背景資料管理控制平台。
· 完整的錯誤資訊提示:在開發調試過程中如果出現運作錯誤或者異常,Django可以提供非常完整的錯誤資訊幫助定位問題。
那麼,我們根據前面的選擇原則我們來逐條對比一下:
1.主流、活躍程度:
從Github的資料來看,Django的開發非常活躍,疊代速度也非常快。
2.是否可以滿足需求:
Django以要素齊全、工具豐富、架構龐大著稱,基本上别的架構有的它有,别的架構沒有的它也有,如果Django滿足不了需求,那麼别的架構同樣也一樣。
3.時效性:
Django有很長的開發和實踐過程,或早或晚的文檔、教程、幫助、部落格等等非常多,資料更新速度也很快,比如部落客個人網站的Django教程,大家沒事可以逛逛,-。
4.入門友好程度:
一個架構能否流行起來,對新手入門是否友好非常關鍵。Django在這一點做的非常好。