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