注:本文是應可樂兄 @Yi罐可樂 的邀請寫下的簡短文章,也是對自己學習 Python web 開發的一個總結與交待。
文章首發于與可樂合著的 github 倉庫:
python-django-learning
Python 基礎
當你學到 Django 的時候,我們默認你已經有了 Python 基礎。如果你沒有 Python 基礎,或者認為自己還需要在 Python 基礎上多花一些時候,你可以選擇從以下三本書著手。
《Python編程 從入門到實踐》 (Python Crash Course: A Hands-On, Project-Based Introduction to Programming)這本書的作者就是 Django 項目的維護者之一。本書在學習 Python 基礎的同時,可以學到一些 Python 的最佳實踐(當然談到最佳實踐,有更多的進階書籍的選擇)。推薦本書的另一個原因是書籍質量不錯,在美國亞馬遜的 Python programming 排行榜上榮獲“Best seller“,194個讀者綜合評分為4.4的高分(滿分5分)。
《"笨辦法"學Python(第3版)》 (Learn Python the Hard Way) 這本書簡稱“LPHW”,是經久不衰的 Python 入門書。本書強調的是肌肉記憶,強調的是編程猶如彈吉他,需要親手實踐、加強肌肉記憶。如果你對編程也沒有太多概念,這本書會比較輕松的帶你入門,增強你的編程自信心。
《Python 基礎教程》(Beginning Python: From Novice to Professional) 如果在這三本中選一本必看的基礎書,個人更偏好、也更推薦這一本。作者對基礎知識的講解清晰明了,內容簡單但是并不膚淺。講解過程通暢,基本不存在費解的情況。代碼小片段實例比比皆是,馬上就可以動手實踐來理解概念,可以讓人更容易記得住,學習的效果也是相當好。較深的概念有延展的接口,提供方向供后期自己去擴展。值得一提的是,目前這本書中文翻譯是仍然是2009年英文版的 Python 2.7,而今年(2017年)4月Apress出版社繼續推出了該書最新的第三版,已經使用 Python 3 的版本(暫無中文版)。作者 Magnus Lie Hetland 在 2006 年開始寫作第一版至今,時隔11年還能繼續推出最新版,而且內容質量靠譜,實在難能可貴。
Django 與 Python 開發環境問題
注意:目前在維護 Django 版本為:Django 1.8(長期支持版,LTS),Django 1.10,Django 1.11(最新版,長期支持版,LTS,也是最后一個支持 Python2的版本)。
Django 1.8 官方只維護到 2018 年 4 月,Django 官方會繼續為其提供相應的安全補丁。考慮到 Django 1.8 版本即將過期,因此建議從目前開始新項目都采用 Django 1.11 開發。Django 1.11 將是最后一個兼容 Python 2 的 Django 版本,將維護至 2020 年 4 月。Django 2.0 即將在 2017 年 12 月推出,從 2.0 版本開始,Django 將只支持 Python 3。Python 3 逐漸成為 Python 開發的趨勢,類似 Instagram 等大公司近兩年逐漸向 Python 3 遷移。
Python 3 最引人注目的是其原生異步特點(Python 3.4 實驗性引入原生異步,在 Python 3.6 正式成為原生內置標準庫),但是 Python 的異步生態仍未大規模廣泛建立。雖然 Python 異步 web 開發框架有老牌、穩定、龐大的 Twisted(2000年初開發)、以及 2009 年 Facebook 開源出來的 Tornado,但是當前 Python web 開發的主流仍舊是包括 Django 與 Flask 在內的 Python web 同步框架。異步開發特點是一旦選擇異步,整條技術棧都要換成異步相關的庫(這也意味著難度大、風險高),否則異步可能就會被阻塞。對比來看,目前異步對性能提升,還沒有強大到吸引知名公司去使用 Python 進行異步開發。也許 Mozilla 可能會是第一批進行 Python 異步開發的公司。Mozilla(開發火狐瀏覽器 Firefox 的公司)的后臺目前使用 Flask 開發,據其后臺開發工程師 Tarek Ziade 在 2017 年 6 月的演講稱,后續的后臺系統可能嘗試用 aiohttp 進行開發。
如果學習資料是這些版本以前的版本,比如 Django 1.7,則不建議再學習已經過時的資料。對于書籍是否已經過時,Two Scoops 的作者 Daniel R. Greenfeld(也是Django的項目維護者)有一個書籍清單供參考(Current Django Books)。
Django 的版本以及 Python 開發環境至關重要,請在最開始學習 Django 的時候就引起重視。由于 Python、Django以及其他第三方包的版本不同,有時候會產生與學習資料不一樣的結果。建議學習過程中注意兩點:
- 為每一個項目建立虛擬環境,建立相對獨立的開發環境
- 嚴格按照學習資料的版本進行開發。注意是 Python 2 還是 Python 3,Django 的版本、以及第三方包的版本號。
Django 基礎
1. 視頻
推薦使用慕課網的兩門免費在線視頻課程作為入門:
這兩門課基本涵蓋了 Django 最核心、同時也是最常用的部分,他們會給你建立一個 Django 的整體概念,便于消除你對 Django 的陌生感和恐懼感。
如果想進一步詳細的了解 Django,有個綜合性的教程名叫
該教程包含 gibbook 電子書(免費)以及視頻部分(收費)。該教程之所以比較推薦,作者是搜狐的胡陽(博客地址)。陽哥長期在搜狐大量實際使用 Django,而且對源碼比較熟悉,所以該教程講得深入淺出,有不少獨到的見解。
2. 文檔
在有了視頻的感性認識之后,建議馬上閱讀完 Django 文檔的新手入門6個部分的內容,并親手實踐讓代碼能跑起來。文檔是最權威也是最全面的 Django 參考資料。
- Getting started Django 1.11 英文原版文檔的新手入門部分。
- Django 中文文檔 1.8 Django 1.8 的中文文檔(gitbook在線書)。
3. 書籍與博客
3.1 英文
- Mastering Django: Core: The Complete Guide to Django 1.8 LTS 這本書就是大名鼎鼎的 Django Book 的最新版本。本書前7章是連貫的學習教程,可作為入門教材,后面的章節以講解概念為主。《中文版的 Django Book》 使用的是 Django 1.1 版本,已經嚴重過時,中文版本僅供參考。作者的主頁是 djangobook.com。
- Hello Web App 作者之前主要從事前段工作,以一個新手的視角來完成本書。整書敘述流暢,以及跟著書完成代碼。作者還有一本后續的書籍 Hello Web App: Intermediate Concepts ,內容稍微深一些。
另外有人也經常推薦以下內容,供參考:
- Tango With Django: A beginner's Guide to Web Development With Python / Django 1.9 值得注意的是這本書被列為 Two Scoops 的作者列為過時書籍。
- Django Girls Tutorial Django Girl嚴格來說已經相當于是一個商業組織,因為該組織在賣周邊、做培訓,但是入門教程還是不錯的,內容基本與 Tango with Django 類似。最近還推出該入門教程的擴展部分。
3.2 中文
- 自強學堂:Django 教程 內容詳實免費。值得一提的是作者使用 Django 建站,完全是在實踐 Django 的使用,而且作者從2015年至今一直在根據 Django 版本升級而更新教學內容,從最初的 Django 1.6 更新到了 Django 1.10。作者稱最新版本的 Django 1.11 內容馬上就要推出。
- Django Girls 教程 Django Girls 的中文版,使用 Django 1.8。
- 追夢人物的博客 以 Django 1.10 為基礎開發博客到部署的完整教程。
Django 進階
1. 視頻
中文視頻內容有很多,但是從內容的深度、廣度、教學實踐、教學質量來看,推薦慕課網的強力 Django 內容。
- 強力django+殺手級xadmin打造上線標準的在線教育平臺 慕課網付費課程。雖然收費,但是課程質量上佳。內含一個 refresh 的小項目和一個較大的系統項目,涉及 Django 的內容較廣,完成后可以達到上線標準。常被譽為“Django課程的良心之作”。
英文視頻中,美國的 Justin Mitchel 長期專注于做 Django 培訓。他的部分教學視頻也放在 YouTube 上。推薦三門系列課程,分別是完成一個基本博客,增加復雜功能,到使用 django-rest-framework。內容詳實,值得一看。
2. 書籍
Two Scoops of Django:目前有兩個版本 Two Scoops of Django: Best Practices for Django 1.11 和 Two Scoops of Django: Best Practices for Django 1.8 。這本書在 Django 的名氣也是非常大,基本可以說影響過大多數 Django 開發人員,如果要進階稱為 Django 專業開發者,這本書是繞不過去的必看書籍。內容主要涵蓋 Django 的最佳實踐。
Django By Example 在進階的課程中,本書算是不錯的。雖然一些章節(比如第7章)部分代碼仍然存在 bug,但是一方面作者正在該書主頁不斷進行代碼更正,另一方面也是對中國讀者最好的是,這本書已經由同在簡書的 @夜夜月 進行了全書翻譯:《Django By Example》中文版。
Django Unleashed 內容覆蓋較廣,很多內容在其他書籍中并沒有提及,比如密碼的hash與加密等。但是沒有實戰項目。
《Python Web 測試驅動方法》 雖然測試驅動的開發方法(Test-Driven Development,TDD)并不是每個項目都會采用,但是測試的思想與方法還是值得去掌握。Python 作為一門動態語言,沒有靜態類型檢測的情況下,測試的重要性就顯得尤為重要。本書使用 Django 的整個開發流程作為實例,作者不僅講了開發過程單元測試和 Selenium 測試,同時也把部署的內容也覆蓋到。內容始于 Django,但不僅僅是 Django,相信使用其他框架的 Python 開發者也可以從中獲益匪淺。
3. 博客
Vitor Freitas: Simple is better than complex 作者是旅居芬蘭的巴西人,博客上有76篇關于 Python、Django 以及網絡開發的文字。文章質量較高,可以郵件訂閱。
Huang Huang 的博客 之所以提到這個博客,主要因為作者認真寫了三篇關于《High Perfomance Django》的閱讀筆記:筆記一、筆記二、筆記三。從數據庫優化、緩存、容災、后臺視圖完善,這些一點一滴的內容都是 Django 項目開發過程中遲早會遇到的瓶頸,看一下這些內容也許就會對后面的解決方案有更深的理解。比如『話說Django orm性能為什么比原生的mysqldb慢』這篇文章就遇到了后臺報表頁面打開很慢的坑,這也是完善提高 Django 性能的地方。
Django RESTful API
Django 的 REST 化主要是兩個第三方包:django-rest-framework 和 django-tastypie。雖然后者開發時間較早,但是最推薦的是前者,即 django-rest-framework。該框架內容更全,調試也方便。
1. 文檔
django-rest-framework 的文檔分為英文和中文。英文就是原版的網站,中文有兩個作者的翻譯,但都是只翻譯了入門部分。
- 英文版文檔
- 中文文檔有兩個,可以對照看:中文文檔 Roy 版本 以及 中文文檔 Eason版本。
2. 視頻
Vue+Django REST framework 打造生鮮電商項目 可能是目前中文 Django 教學視頻中最好的課程,教學時間長度與內容都有相當的保證。視頻作者 Bobby 詳細闡述了自己對的 Django 的理解,可以讓人知道多種遞進式 rest API 開發方式。得益于 Bobby 精益求精的態度,個人覺得干貨的程度即使與國外的內容比較也是不逞多讓。另外再加上與 Vue 前端的整體交互綜合開發,已經可以初步滿足一個中小企業的網絡解決方案。
Build Your Own Backend REST API using Django REST Framework 作者是英國人 Mark Winterbottom,編程專業,而且講課細致到位。
- Blog API with Django Rest Framework 仍然是之前提到的美國人 Austin Mitchel 的 YouTube 課程。
3. 書籍與博客
- 《輕量級Django》 英文版是Lightweight Django: Using REST, WebSockets, and Backbone,嚴格來說這不是一本完全講 rest-framework 的書,而是講解如何從傳統的 Django 過渡到前后端分離 Django 。
- Building RESTful Python Web Services 內容涉及 Python 三大網絡框架:Django,Flask以及Tornado。
- Haiiiiiyun:Django REST 框架 V3 教程,講到 rest 的7門課程。
Django 業界最新信息
- Django: Under The Hood 專注于 Django 的內容,雖然著名的 PyCon 經常請 Django 專家去演講,但是 Django: Under The Hood 基本都是 Django 的大牛,比如2016年壓軸演講是邀請了 Instgram 的后端去講解 INS 如何用 Django 做成了如此規模巨大的社交圖片分享網站。該組織近兩年的演講內容都分享在 YouTube 上可以找到。Django Under The Hood:YouTube地址
- PyCon 也非常關注 Django 的發展。Django 并非完美無缺,在網絡技術高速發展的今天,Django 也需要及時的進化以適應形勢。在 PyCon 上,對 Django 熱愛程序員們,提出了尖銳的 Django 問題,隨后也有新的解決方案出來。的有代表性的演講包括:
- Why Django Sucks - PyCon SE 2015 作者提出 Django 在某些方面跟不上網絡技術的發展趨勢,提出了自己的三點建議。
- Reinventing Django for the Real-Time Web - PyCon 2016 作者是 Django 的 Channel 部分的開發者,專注于 Socket 的包裝與編程,以實現 Django 的服務器推送、異步 Socket 等功能。
- Building Dynamic Dashboards With Django and D3 - PyCon US 2016 比較好的把 Django 與 React 以及 D3 結合在一起為警局提供數據看板項目。
修改記錄
2017-10-23 更新內容
- Python 基礎部分:不再推薦《Python學習手冊(第4版)》。基礎書籍數量保持三本,增加推薦新書籍,本書不再推薦。
被刪除內容:
《Python學習手冊(第4版)》 (Learning Python, 5th Edition)本書中文是第四版,英文已經更新到第五版。該作者長期從事 Python 教育,他知道學習者通常會問什么問題,所以講解也是比較詳細。如果你需要快速入門 Python ,不推薦這本書。但是相信你在 Python 進階過程中,遲早會遇到一些很 Pythonic 的問題,比如:字典的三種創建方式、列表推導式(list comprehension)和裝飾器(decorator)。你可以在這里快速找到詳細的講解。作者的另外還有兩本高質量的 Python 書值得一讀:Python Pocket Reference: Python In Your Pocket (Pocket Reference (O'Reilly)) 以及Programming Python: Powerful Object-Oriented Programming。
Python 基礎部分:增加推薦《Python 基礎教程》
Django 進階部分,2. 書籍:增加《Python Web 測試驅動方法》。
Django 進階部分,3. 博客:增加 "Huang Huang 的博客"。
Django RESTful API,2. 視頻:增加 "Vue+Django REST framework 打造生鮮電商項目"。
修改部分格式錯誤。
2017-10-27 更新內容
- 增加對 Django 版本的說明