這個(gè)題目實(shí)在是有些大,如果主要介紹Django那又不如官方文檔詳細(xì),如果挑細(xì)節(jié)說(shuō)又顯得分類不夠明確枪汪。所以就寫一些個(gè)人對(duì)Django的理解吧涌穆。日后顯然是會(huì)填充更多內(nèi)容的。
這里先貼上 The Django Book雀久,開(kāi)始Django時(shí)必定先看的書宿稀。
以下文字摘自 The Django Book 第一章 :
Django 是從真實(shí)世界的應(yīng)用中成長(zhǎng)起來(lái)的,它是由 堪薩斯(Kansas)州 Lawrence 城中的一個(gè) 網(wǎng)絡(luò)開(kāi)發(fā)小組編寫的赖捌。 它誕生于 2003 年秋天祝沸,那時(shí) Lawrence Journal-World 報(bào)紙的 程序員 Adrian Holovaty 和 Simon Willison 開(kāi)始用 Python 來(lái)編寫程序。
當(dāng)時(shí)他們的 World Online 小組制作并維護(hù)當(dāng)?shù)氐膸讉€(gè)新聞?wù)军c(diǎn), 并在以新聞界特有的快節(jié)奏開(kāi)發(fā)環(huán)境中逐漸發(fā)展越庇。 這些站點(diǎn)包括有 LJWorld.com罩锐、Lawrence.com 和 KUsports.com, 記者(或管理層) 要求增加的特征或整個(gè)程序都能在計(jì)劃時(shí)間內(nèi)快速的被建立悦荒,這些時(shí)間通常只有幾天 或幾個(gè)小時(shí)唯欣。 因此,Adrian 和 Simon 開(kāi)發(fā)了一種節(jié)省時(shí)間的網(wǎng)絡(luò)程序開(kāi)發(fā)框架搬味, 這是在截止時(shí)間前能完成程序的唯一途徑境氢。
2005 年的夏天,當(dāng)這個(gè)框架開(kāi)發(fā)完成時(shí)碰纬,它已經(jīng)用來(lái)制作了很多個(gè) World Online 的站點(diǎn)萍聊。 當(dāng)時(shí) World Online 小組中的 Jacob Kaplan-Moss 決定把這個(gè)框架發(fā)布為一個(gè)開(kāi)源軟件。
使用Django半年時(shí)間悦析,看過(guò)各種人對(duì)其的評(píng)價(jià)寿桨,有一句話特別贊同:
Django適合用來(lái)搭建中型項(xiàng)目,太小型或者太大型都不合適强戴。
如果你只需要一個(gè)個(gè)人主頁(yè)亭螟,或者一個(gè)宣傳網(wǎng)站,又或者僅僅是用來(lái)炫H5技術(shù)的網(wǎng)站骑歹,那么Django一定不會(huì)是你的首選预烙。雖說(shuō)搭建Django也很快,但是我們先來(lái)看一下搭建Django后臺(tái)到顯示出你的html頁(yè)面的流程:
- 安裝Python
- 安裝Django
- 安裝數(shù)據(jù)庫(kù)(可選)
- 創(chuàng)建一個(gè)project
- 準(zhǔn)備好你的HTML頁(yè)面
- 編寫一個(gè)view函數(shù)道媚,選擇你的HTML頁(yè)面來(lái)渲染
- 修改urls.py扁掸,將view與路徑綁定
- 修改settings.py,綁定靜態(tài)文件路徑
- runserver! tada! 你看到你的頁(yè)面了
前兩步是所有Web框架都逃不開(kāi)的步驟(就像鐵匠至少得有錘子和鐵砧)最域,第3步是小型項(xiàng)目一定不會(huì)選擇的(如果一個(gè)項(xiàng)目使用到了數(shù)據(jù)庫(kù)谴分,我一定不會(huì)稱其小)镀脂,第4步大部分框架都會(huì)提供便利的腳本牺蹄。到此為止Django還是沒(méi)什么特別的,但是從第5步往下看薄翅。如果你想要一個(gè)新的頁(yè)面钞馁,你至少得分別做3件事:寫頁(yè)面虑省,寫view,綁定url僧凰。如果settings都還沒(méi)配置,那就是4件事熟丸,如果想把網(wǎng)站部署到網(wǎng)絡(luò)上训措,那靜態(tài)文件還有得可折騰的,不過(guò)這準(zhǔn)備在另一篇文章里再細(xì)說(shuō)光羞,這里先按下不表绩鸣。
3個(gè)步驟分別對(duì)應(yīng)3個(gè)不同的文件,如果你是個(gè)對(duì)workspace的清晰程度有極度潔癖的人(比如我)纱兑,那你還可能面對(duì)3個(gè)不同的存放位置呀闻。在最初的一個(gè)月里這三個(gè)文件讓我不知道出了多少次錯(cuò),然而我不過(guò)是想添加幾個(gè)頁(yè)面而已潜慎,為什么就不能前臺(tái)搞一下樣式后臺(tái)再搞一下就好了呢捡多?非得讓我后臺(tái)改2個(gè)文件才行。
當(dāng)然這可以說(shuō)只是熟練度的問(wèn)題铐炫,我承認(rèn)典奉,如果你有搭建Web后臺(tái)的經(jīng)驗(yàn)失受,現(xiàn)在想要新開(kāi)一個(gè)項(xiàng)目,那什么順手用什么,Tomcat+Spring都可以剪芥。但是對(duì)于一個(gè)沒(méi)什么經(jīng)驗(yàn)也不明確哪個(gè)組件要哪個(gè)組件不要的新手,我不會(huì)推薦Django拓瞪,因?yàn)榭赡茏屗x擇要不要數(shù)據(jù)庫(kù)都得折騰半天溶锭。選擇NodeJS會(huì)更好一些,畢竟JS誰(shuí)都會(huì)(手動(dòng)斜眼)乘综。
對(duì)于大型項(xiàng)目來(lái)說(shuō)憎账,Django也不是首選,不過(guò)現(xiàn)在也不乏用Django所寫的大型網(wǎng)站瘾带,比如知乎鼠哥,日PV也很高,那是因?yàn)樗麄兪菑囊粋€(gè)小網(wǎng)站不斷演變而來(lái)看政,舊代碼放在那朴恳,棄之不用的代價(jià)太高。但是大如12306的體量允蚣,絕不可能一開(kāi)始就選擇Django于颖。就我現(xiàn)在接觸到的范圍來(lái)解釋,Django的并發(fā)能力實(shí)在太弱嚷兔。簡(jiǎn)單來(lái)說(shuō)可能是Python這個(gè)語(yǔ)言的問(wèn)題森渐,PIL機(jī)制的存在讓多線程能力比較弱做入,不過(guò)如果要深入下去那可以說(shuō)的內(nèi)容還是很多的,以后另開(kāi)一篇再來(lái)說(shuō)吧同衣。
所以Django寫小項(xiàng)目有點(diǎn)小題大作竟块,寫大項(xiàng)目有點(diǎn)力不從心,但是不能說(shuō)這是一個(gè)不優(yōu)秀的框架耐齐,相反這是一個(gè)優(yōu)秀到不行的框架浪秘。Django的ORM實(shí)在是能夠幫開(kāi)發(fā)者省去很多時(shí)間,同樣省時(shí)間的還有一套完整的authentication模塊埠况。之前所說(shuō)的三個(gè)步驟對(duì)于中型項(xiàng)目來(lái)說(shuō)又變成了優(yōu)勢(shì)耸携,因?yàn)榻Y(jié)構(gòu)不會(huì)更復(fù)雜了,無(wú)論urls再怎么寫辕翰,view再怎么拆分夺衍,始終都是一份html template(這是指Django的template),一份view喜命,一份url沟沙。對(duì)于重復(fù)的機(jī)械的編寫新頁(yè)面一事來(lái)說(shuō),不會(huì)出現(xiàn)復(fù)雜度爆炸的情況渊抄。而做web應(yīng)用不外乎就是這些事尝胆。自然web開(kāi)發(fā)有趣的事也有很多,不過(guò)那又是另一個(gè)話題了护桦。
所以總的來(lái)說(shuō)Django是一個(gè)很趁手的工具含衔,雖然有各種各樣的缺點(diǎn),但多少都有解決辦法二庵,并且作為一款開(kāi)源框架它也在不斷自我完善贪染,感謝整個(gè)社區(qū)的貢獻(xiàn)。所以無(wú)論哪一個(gè)公司拿它來(lái)做核心工具催享,那都是OK的杭隙。