我從 django 學(xué)到了什么鲤孵?

接觸 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è):

  1. django 的文檔完備健芭,官網(wǎng)的快速入門(mén)例子以及可以直接使用的 admin 應(yīng)用。這使得 django 的入門(mén)門(mén)檻非常低秀姐。

  2. 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)目的特殊需求。


middleware.png

上圖中的 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):

  1. 內(nèi)置 admin昙楚,后臺(tái)管理非常簡(jiǎn)單近速;

  2. 內(nèi)置權(quán)限應(yīng)用,權(quán)限處理非常簡(jiǎn)單(但是不能設(shè)置單條記錄的權(quán)限堪旧,django 的 rest 框架可以實(shí)現(xiàn))削葱。

  3. 模型 querysets 功能非常強(qiáng)大,可以非常簡(jiǎn)單的獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)淳梦。

  4. 內(nèi)置大量類(lèi)視圖析砸,視圖開(kāi)發(fā)非常簡(jiǎn)單。

  5. 表單處理非常方便爆袍。

從《 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è)旅程真的非常美妙...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赎败,一起剝皮案震驚了整個(gè)濱河市秕衙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌僵刮,老刑警劉巖据忘,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異搞糕,居然都是意外死亡勇吊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)窍仰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汉规,“玉大人,你說(shuō)我怎么就攤上這事驹吮≌胧罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵碟狞,是天一觀的道長(zhǎng)啄枕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)篷就,這世上最難降的妖魔是什么射亏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮竭业,結(jié)果婚禮上智润,老公的妹妹穿的比我還像新娘。我一直安慰自己未辆,他們只是感情好窟绷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著咐柜,像睡著了一般兼蜈。 火紅的嫁衣襯著肌膚如雪攘残。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天为狸,我揣著相機(jī)與錄音歼郭,去河邊找鬼。 笑死辐棒,一個(gè)胖子當(dāng)著我的面吹牛病曾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漾根,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泰涂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辐怕?” 一聲冷哼從身側(cè)響起逼蒙,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寄疏,沒(méi)想到半個(gè)月后是牢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赁还,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年妖泄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驹沿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘策。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渊季,靈堂內(nèi)的尸體忽然破棺而出朋蔫,到底是詐尸還是另有隱情,我是刑警寧澤却汉,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布驯妄,位于F島的核電站,受9級(jí)特大地震影響合砂,放射性物質(zhì)發(fā)生泄漏青扔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一翩伪、第九天 我趴在偏房一處隱蔽的房頂上張望微猖。 院中可真熱鬧,春花似錦缘屹、人聲如沸凛剥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)犁珠。三九已至逻炊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間犁享,已是汗流浹背余素。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炊昆,地道東北人溺森。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像窑眯,于是被迫代替她去往敵國(guó)和親屏积。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容