通過選取用于創(chuàng)建輕量級應(yīng)用組件的形式來理解進(jìn)行Django解耦設(shè)計(jì)的方法。通過本書的學(xué)習(xí),你將具備創(chuàng)建單頁面響應(yīng)實(shí)時交互應(yīng)用的能力。如果你熟練掌握了Python和JavaScript,則可以開始編寫應(yīng)用程序了。
■ 學(xué)習(xí)開始新建Django項(xiàng)目的輕量級方法。
■ 將可重用應(yīng)用分解成與其他應(yīng)用通信的更細(xì)小的服務(wù)。
■ 創(chuàng)建靜態(tài)、便捷的原型站點(diǎn)作為網(wǎng)站和應(yīng)用的支撐平臺。
■ 使用Django Rest Framework構(gòu)建REST API。
■ 學(xué)習(xí)如何使用帶有Backbone.js的MVC框架的Django。
■ 在REST API平臺上創(chuàng)建單頁面網(wǎng)絡(luò)應(yīng)用。
■ 將WebSockets和Tornado網(wǎng)絡(luò)庫與實(shí)時特性相融合。
■ 在項(xiàng)目開發(fā)中使用本書的代碼驅(qū)動實(shí)例。
自Django 創(chuàng)建以來,各種各樣的開源社區(qū)已經(jīng)構(gòu)建了很多Web 框架,比如JavaScript 社區(qū)創(chuàng)建的Angular.js 、Ember.js 和Backbone.js 之類面向前端的Web 框架,它們是現(xiàn)代Web 開發(fā)中的先驅(qū)。Django 從哪里入手來適應(yīng)這些框架呢?我們?nèi)绾螌⒖蛻舳薓VC 框架整合成為當(dāng)前的Django 基礎(chǔ)架構(gòu)?
本書講述如何利用Django 強(qiáng)大的“自支持”功能體系。本書的目標(biāo)是引導(dǎo)讀者跨越認(rèn)為Django 太繁重而無法進(jìn)行快速應(yīng)用開發(fā)的誤區(qū)。從創(chuàng)建世界上最小的Django 應(yīng)用到構(gòu)建RESTful API ,本書將引導(dǎo)讀者學(xué)習(xí)如何利用這種流行的Python Web 框架。
寫這本書的目的
我們編寫本書主要是出于對Django 的熱愛。我們的社區(qū)是令人驚奇的,它有很多資源可以用來學(xué)習(xí)Django 和開發(fā)應(yīng)用。盡管我們也喜歡包括官方的Django 文檔在內(nèi)的一些資源,但這僅僅是對Django 強(qiáng)大功能的過于關(guān)注,而非它的解耦設(shè)計(jì)。Django 是一個令人滿意的框架,它帶有很多用于構(gòu)建Web 應(yīng)用的通用程序。在本書中,我們要突出說明如何將這些組件進(jìn)行分離和間接替換,并從中選出最適合創(chuàng)建應(yīng)用的一些組件來。同樣地,我們想要將Django 項(xiàng)目和應(yīng)用的典型框架進(jìn)行分解。我們的目標(biāo)是使讀者不再提出“我怎樣用Django 完成我的X 工作”這樣的問題,而是提出“Django 能幫我完成X 工作嗎?如果不能,社區(qū)有可用的工具嗎”這樣的問題。
另外,我們想要回答的問題是利用大量客戶端實(shí)時交互,以及與本地可移動應(yīng)用匹配的組件構(gòu)建更多應(yīng)用時,將Django 放在網(wǎng)絡(luò)的什么地方適用。作為框架,用戶對Django 一無所知,這使得一些喜歡Django 的用戶無法得到構(gòu)建這種應(yīng)用的指導(dǎo)。我們希望本書能夠幫助解決這些問題,想看到Django 及其社區(qū)日益壯大,并在多年后大家也成為它的一員。
本書讀者對象
如果你喜歡閱讀本書,你很可能是Django 的中級用戶。在學(xué)習(xí)完Django 的注冊教程以及編寫了一些基本Django 應(yīng)用后,很想知道下一步該如何做。本書接下來會幫助你基本掌握如何利用Django 的有效性和簡單性。
或者,你可能正在進(jìn)行一個Django 項(xiàng)目,很想知道如何將Backbone.js 整合到你的項(xiàng)目中。本書將引導(dǎo)你進(jìn)行一些有關(guān)整合的最好練習(xí),并為構(gòu)建內(nèi)容豐富的Web 應(yīng)用提供一個起點(diǎn)。
哪些人不適合閱讀本書?
盡管本書適用許多不同背景的開發(fā)者,但并不能面面俱到。對于那些不具備編寫Python 和JavaScript 程序能力的人來說,這本書可能很不適合。書中所有的概念和實(shí)例都是圍繞這些語言編寫的,并在每個章節(jié)中大量使用。對于那些初次接觸Django 的新手,也不適合。
關(guān)于本書示例
書中的每個項(xiàng)目示例都是在快速應(yīng)用開發(fā)的主旨下精心制作的。在每一章,都將學(xué)到在項(xiàng)目管理、工具和團(tuán)隊(duì)合作支持下創(chuàng)建項(xiàng)目的方法。我們想要讀者創(chuàng)建用于自己的項(xiàng)目,并能夠根據(jù)自己的需要進(jìn)行定制。一般而言,本書提供的實(shí)例代碼,都可以在你的程序和文檔中進(jìn)行使用,無需得到我們的許可,除非是更新代碼的重要內(nèi)容。例如,使用本書中的幾個代碼塊編寫程序是不需要得到允許的。銷售或分發(fā)O’Reilly 書中的實(shí)例光盤就需要得到許可。引用本書或本書中的實(shí)例代碼解答問題不需要得到允許。將本書中的大量實(shí)例代碼集成到自己產(chǎn)品的文檔中需要得到許可。
我們很贊賞對本書的引用,但不要求。通常引用包括標(biāo)題、作者、出版商和ISBN 。例如:“《Lightweight Django》Julia Elman and Mark Lavin (O’Reilly),Copyright 2015 Julia Elman and Mark Lavin,978-1-491-94594-0 ”。
如果發(fā)現(xiàn)所使用的代碼示例超出了上面的許可范圍,可以隨時通過郵件與我們聯(lián)系:
permissions@oreilly.com 。
本書結(jié)構(gòu)
第1 章,世界上最小的Django 項(xiàng)目。創(chuàng)建輕便簡單的網(wǎng)絡(luò)應(yīng)用是本書的核心思想。在這一章,要創(chuàng)建一個可運(yùn)行的單行文件“Hello World ”的Django 應(yīng)用。
第2 章,無狀態(tài)的Web 應(yīng)用。講述占位符圖像服務(wù)的創(chuàng)建方法。第2 章將引導(dǎo)讀者通過創(chuàng)建無狀態(tài)網(wǎng)絡(luò)應(yīng)用來生成占位符圖像的URL 。
第3 章,創(chuàng)建靜態(tài)站點(diǎn)生成器。快速構(gòu)建原型是一門有用的創(chuàng)建和輔助網(wǎng)絡(luò)應(yīng)用的技術(shù)。我們要通過創(chuàng)建靜態(tài)網(wǎng)站生成器協(xié)助維護(hù)團(tuán)隊(duì)項(xiàng)目的方式來檢驗(yàn)該技術(shù)的效果。
第4 章,構(gòu)建REST API 。REST API 是創(chuàng)建豐富的、具有內(nèi)容相關(guān)性的網(wǎng)絡(luò)應(yīng)用的重要部分。在這一章我們利用Django 靜態(tài)框架開始構(gòu)建一個大比例的Scrum 板應(yīng)用。
第5 章,使用Backbone.js 的客戶端Django 。本章繼續(xù)講述在第4 章中用新構(gòu)建的RESTful API 創(chuàng)建的Backbone.js 應(yīng)用。介紹創(chuàng)建新Backbone 應(yīng)用的每個組件以及如何用Django 同步該客戶端框架。
第6 章,單頁面Web 應(yīng)用。單頁面網(wǎng)絡(luò)應(yīng)用是一種能夠創(chuàng)建豐富客戶端網(wǎng)絡(luò)應(yīng)用的途徑。在本章,我們將回到簡單的Backbone 應(yīng)用中,不斷使這個單頁面應(yīng)用更加健壯。
第7 章,實(shí)時Django 。這一章講述創(chuàng)建響應(yīng)實(shí)時交互的網(wǎng)絡(luò)應(yīng)用,為用戶提供及時滿意的服務(wù)。為了繼續(xù)完成先前兩章的項(xiàng)目,我們要將一個實(shí)時組件添加到使用網(wǎng)絡(luò)插件和Tornado 的Scrum 板上,這是一個用Python 編寫的異步網(wǎng)絡(luò)庫。
第8 章,Django 和Tornado 通信。將強(qiáng)大的Django 與Tornado 的健壯特性相結(jié)合是創(chuàng)建可變、實(shí)時的Django 應(yīng)用的重要標(biāo)志。在本章中,我們將通過集成Django 的通信能力擴(kuò)展Tornado 服務(wù)器的功能,來建立一種既安全又可交互的聯(lián)系。
致謝
有許多人需要感謝,沒有他們的努力這本書是不可能完成的。本書的編輯Meghan 給了我們很大的支持。
感謝技術(shù)評論員Aymeric Augustin 、Jon Banafato 、Barbara Shaurette 和Marie Selvanadin 給我們的評價,無論是表揚(yáng)還是批評,對我們盡力完成這本書都給予了幫助。也要感謝Heather Scherer 對本書給予的技術(shù)指導(dǎo)。
對所有開源的開發(fā)人員和提供者表示感謝,他們無窮無盡的努力為本書提供了使用和寫作所需的各種工具。
感謝早期版本的讀者,他們給了我們完成工作的機(jī)會,使我們能夠解決敲字和格式缺陷等問題,并提供了反饋,從而使錯誤得到糾正。
Julia
我非常感謝我極其可愛的家庭和親密的朋友,他們對我寫作本書給予了一貫的支持。感謝我的丈夫Andrew ,對我能力的信任和在漫長與崎嶇的寫作過程中的一貫鼓舞和堅(jiān)定的支持。感謝我的母親Katherine ,她使我超越了自己的能力。感謝我的繼父Tom ,他教我如何使用無線電鉆為我的汽車更換機(jī)油,為我灌輸了艱苦工作的價值。感謝我的哥哥Alex 和姐姐Elizabeth ,他們一直作為旁觀者為我鼓勁。感謝我最好的朋友Jenny ,她給了我永恒的愛和終生的友誼。
還要對我的極好的合作者M(jìn)ark 的卓越才能和友誼表示感謝。他是我曾經(jīng)合作過的最有才能的開發(fā)者之一。我們并肩完成了這本書,我不能想象與其他人合作撰寫這本書會是怎樣一個過程。
我還要非常感謝Python 社區(qū)和在我的事業(yè)上給我靈感、鼓勵和指導(dǎo)的特殊成員:James Bennett 、Sean Bleier 、Nathan Borror 、Colin Copeland 、Matt Croydon 、Katie Cunningham 、Selena Deckelmann 、Jacob Kaplan-Moss 、Jessica McKellar 、Jesse Noller 、Christian Metts 、Lynn Root 、Caleb Smith 、Paul Smith 、Karen Tracey 、Malcolm Tredinnick 、Ben Turner 和Simon Willison 。
Julia Elman,一名前端的開發(fā)者和技術(shù)教育的倡導(dǎo)者,2008年在World Online工作期間就開始了Django的學(xué)習(xí)。她是Girl Develop It RDU和PyLadies RDU組織的共同創(chuàng)辦人,該組織幫助超過850名婦女學(xué)習(xí)了編程知識。
Mark Lavin,是北加利福尼亞達(dá)勒姆Caktus咨詢集團(tuán)的技術(shù)主管。他是在華爾街進(jìn)行衍生品定價工作數(shù)年后開始進(jìn)行Python網(wǎng)絡(luò)開發(fā)的。他負(fù)責(zé)對與Django開發(fā)相關(guān)的幾個開源項(xiàng)目進(jìn)行維護(hù)。