注:本文是應(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的高分(滿(mǎn)分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ì)后面的解決方案有更深的理解癌佩。比如『話(huà)說(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)可以初步滿(mǎn)足一個(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ō)明