接觸 django 已經(jīng)一年半了用僧,其間使用 django 實(shí)現(xiàn)了三個(gè)上線(xiàn)項(xiàng)目讨越,并且完成了 《django by example》一書(shū)的四個(gè)項(xiàng)目。在這里稍作總結(jié)永毅。
為什么選擇 django 把跨?
由于之前四五年的時(shí)間里一直在使用 python 做數(shù)據(jù)分析和系統(tǒng)優(yōu)化的工作,因此沼死,當(dāng)需要展示這些工作時(shí)選擇 python 的 web框架成了及其自然的事情着逐。那么,python 的 web 框架有很多,為什么選擇 django 呢耸别?
其實(shí)最初原因只有兩個(gè):
django 的文檔完備健芭,官網(wǎng)的快速入門(mén)例子以及可以直接使用的 admin 應(yīng)用。這使得 django 的入門(mén)門(mén)檻非常低秀姐。
django 源碼結(jié)構(gòu)清晰慈迈,遇到問(wèn)題可以很輕松的找到源碼進(jìn)行分析。
django 架構(gòu)
web 框架的功能簡(jiǎn)單來(lái)說(shuō)是接收網(wǎng)絡(luò)請(qǐng)求并作出相應(yīng)的響應(yīng)省有。django 通過(guò)中間件對(duì)請(qǐng)求和響應(yīng)進(jìn)行了處理痒留。處理必須使用的中間件,django 內(nèi)置許多可選的中間件蠢沿,此外伸头,我們還可以開(kāi)發(fā)自己的中間件來(lái)滿(mǎn)足項(xiàng)目的特殊需求。
上圖中的 view 部分是需要開(kāi)發(fā)者完成的舷蟀,具體實(shí)現(xiàn)時(shí)需要完成模型恤磷、視圖和模板的開(kāi)發(fā)。
模型
模型創(chuàng)建
django 內(nèi)置模型基類(lèi)以及覆蓋大多數(shù)字段的字段類(lèi)野宜,因此扫步,使用 django 創(chuàng)建模型只需繼承模型基類(lèi)并且設(shè)置相應(yīng)字段即可。當(dāng)然匈子,還可以很方便的定義一對(duì)一锌妻、一對(duì)多和多對(duì)多的關(guān)系。
Django 還支持模型繼承旬牲,提供抽象模型仿粹、多表模型、代理模型原茅。模型繼承工作方式與 Python 的標(biāo)準(zhǔn)類(lèi)繼承相似吭历。
django 還提供 contenttype 來(lái)更加靈活地建立某一字段與不同模型的關(guān)系。
模型使用
django 的模型默認(rèn)包含名為 objects 的管理器擂橘,可以很方便的使用 模型名稱(chēng).objects 對(duì)數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)表進(jìn)行操作晌区。
如果需要獲取內(nèi)容直接使用.objects.filter() 得到 QuerySet 即可。QuerySet 功能非常強(qiáng)大通贞,而且比使用 sqlalchemy 獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)操作更加簡(jiǎn)單朗若。
ModelForm 可以使用表單操作模型
django 提供 ModelForm 可以很簡(jiǎn)單的建立表單并將表單數(shù)據(jù)保存到模型中。
內(nèi)置處理模型的類(lèi)視圖
django 提供 DetailView昌罩、LIstView 可以很容易的獲取模型中的單條哭懈、多條記錄。
django 還提供 CreateView茎用、UpdateView遣总、DeleteView 來(lái)操作模型內(nèi)容睬罗。
我們實(shí)現(xiàn)視圖時(shí)可以通過(guò)繼承相應(yīng)的積累快速實(shí)現(xiàn)功能。
視圖
提供權(quán)限類(lèi)的通用視圖
django 內(nèi)置一整套權(quán)限應(yīng)用旭斥,我們可以直接拿來(lái)使用容达,當(dāng)然,如果模板與自己網(wǎng)站風(fēng)格不同垂券,在相應(yīng)位置設(shè)置模板即可花盐。
內(nèi)置大量的類(lèi)視圖
django 內(nèi)置大量的類(lèi)視圖,我們創(chuàng)建視圖時(shí)可以通過(guò)繼承相應(yīng)的類(lèi)視圖簡(jiǎn)化開(kāi)發(fā)工作菇爪。
模板
django 提供了大量的標(biāo)簽和過(guò)濾器算芯,可以直接使用。此外娄帖,我們還可以自己創(chuàng)建自定義標(biāo)簽和過(guò)濾器也祠。
django 的優(yōu)點(diǎn)
django 的優(yōu)點(diǎn)可以總結(jié)為以下幾點(diǎn):
內(nèi)置 admin昙楚,后臺(tái)管理非常簡(jiǎn)單近速;
內(nèi)置權(quán)限應(yīng)用,權(quán)限處理非常簡(jiǎn)單(但是不能設(shè)置單條記錄的權(quán)限堪旧,django 的 rest 框架可以實(shí)現(xiàn))削葱。
模型 querysets 功能非常強(qiáng)大,可以非常簡(jiǎn)單的獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)淳梦。
內(nèi)置大量類(lèi)視圖析砸,視圖開(kāi)發(fā)非常簡(jiǎn)單。
表單處理非常方便爆袍。
從《 django by example 》學(xué)到了什么首繁?
《 django by example 》通過(guò)四個(gè)項(xiàng)目不僅講解了 django 的使用方法,還包含許多 django 以外的知識(shí)陨囊,比如 JavaScript弦疮、redis、Celery蜘醋、RESTful API 等胁塞。
除了具體知識(shí),這本書(shū)使用的編程哲學(xué)也非常好压语,印象最深刻的在于 PDF的實(shí)現(xiàn)方法啸罢。
Python 包含很多生成 PDF文件的庫(kù)文件,比較受歡迎的是 Reportlab 胎食,Reportlab 需要為 PDF 文件添加自定義樣式和格式扰才,使得生成 PDF 的成本非常高。曾經(jīng)用了半天的時(shí)間了解這個(gè)庫(kù)厕怜,但是由于免費(fèi)版開(kāi)發(fā)非常復(fù)雜训桶,收費(fèi)版太貴而放棄累驮。
《 django by example》巧妙的回避了這個(gè)問(wèn)題,采用渲染 HTML 模板然后使用 WeasyPrint 將其轉(zhuǎn)換為 PDF 的方法舵揭,這樣使 Python 遠(yuǎn)離了表示層 谤专。深深的體會(huì)了一把各司其職的好處。
學(xué)了 django 下一步學(xué)習(xí)什么午绳?
django rest 框架置侍。可以先從這里處理了解一下它的強(qiáng)大功能拦焚。然后慢慢學(xué)起...
對(duì)于一個(gè)做數(shù)據(jù)分析和系統(tǒng)優(yōu)化的工作的人來(lái)說(shuō)蜡坊,學(xué)習(xí) django 似乎是無(wú)用之功,但是這個(gè)旅程真的非常美妙...