django設(shè)計哲學

原文地址: Django 1.11.18.dev20181205205104 documentation


設(shè)計哲學

這個文檔闡釋了一些django開發(fā)者使用在django中的基本哲學。它的目標是解釋過去和指導未來怀大。

松耦合

django技術(shù)棧的一個基本目標就是”松耦合、高內(nèi)聚“〈缥澹框架的各個層在不必要的情況下现柠,不必知道其他各層脱惰。
例如抱怔,template層不知道web requests蛀柴,數(shù)據(jù)庫層不知道數(shù)據(jù)展示層螃概,視圖層不在意用戶使用哪個template。
雖然django帶來了全棧解決方案的便捷鸽疾,棧的各個層都盡量獨立于其他的層吊洼。

更少的代碼

django的應(yīng)用應(yīng)該使用盡可能少的代碼,他們那應(yīng)該是缺少樣板制肮。
Django應(yīng)該充分使用python的動態(tài)能力冒窍,比如自省。

快速開發(fā)

21世紀框架的特點是讓冗長復(fù)雜的開發(fā)變得快捷豺鼻。django允許快速進行web開發(fā)综液。

DRY,不要重復(fù)造輪子

每個截然不同的概念或者數(shù)據(jù)應(yīng)該存放在一個地方儒飒,而且只有這個地方谬莹。
冗余是不好的,標準化是好的桩了。
作為框架附帽,合理的情形就是從盡可能少的內(nèi)容推斷出盡可能多的內(nèi)容。

另行參考
discussion of DRY on the Portland Pattern Repository

顯示比隱式更好

這是在PEP20中列出的核心python原則井誉,這意味著django不應(yīng)該做太多”魔法方法“蕉扮。至少有一些很耗的理由說明”魔法方法“不應(yīng)該出現(xiàn)。如果”魔法方法“創(chuàng)造了一大堆方便的送悔,并且其他方法難以實現(xiàn)的方法時慢显,這才是”魔法方法“唯一值得使用的地方,并且它不能用一種讓嘗試學歷如何使用這些特性的開發(fā)者感到困惑的方式欠啤。

一致性

框架應(yīng)該從所有層面進行考慮荚藻。這些考慮包括任何事情,從低級的python代碼風格到高級的使用django的經(jīng)驗洁段。

Models

顯示比隱式更好

字段不應(yīng)該假定僅僅由它的名字來確定应狱,這需要太多操作系統(tǒng)的知識并且容易出錯。相反祠丝,在某些情況下疾呻,行為應(yīng)該基于關(guān)鍵字參數(shù),比如字段的類型写半。

包含所有的相關(guān)域的邏輯

模型應(yīng)該將一個”對象“的所有屬性封裝起來岸蜗,遵循Martin Fowler的Active Record設(shè)計模式。
這就是為什么數(shù)據(jù)用模型來表示叠蝇,并且它被定義在模型類中(比如人類可讀的名字璃岳,默認排序這樣的選項,等等)。所有的信息需要知道被存儲在某一個模型中铃慷。

Database API

以下是database API的核心目標:

高效SQL

應(yīng)該以盡可能少的時間來執(zhí)行SQL单芜,并且應(yīng)該在內(nèi)部優(yōu)化SQL的聲明。
這就是為什么開發(fā)者需要顯示的調(diào)用save()犁柜,而不是框架在場景背后默默的進行保存操作洲鸠。
這也是為什么select_related()方法存在的原因。這是一種非強制執(zhí)行的馋缅,一般情況下選擇所有相關(guān)對象的助推器扒腕。

簡潔又強大的語法

數(shù)據(jù)庫API應(yīng)該允許豐富,在盡可能簡短的語句中富有表現(xiàn)力股囊。不應(yīng)該依賴導入其他模塊或者輔助對象袜匿。
聯(lián)結(jié)應(yīng)該在必要的時候,在使用場景背后被自動執(zhí)行稚疹。
系統(tǒng)層面居灯,每個對象可以被關(guān)聯(lián)對象訪問。

選擇原生SQL更簡單内狗,如果我們需要的話

數(shù)據(jù)庫API應(yīng)該意識到它只是捷徑怪嫌,并非必須×常框架應(yīng)該讓自定義SQL更容易--完整的聲明岩灭,或僅僅通過調(diào)用API自定義WHERE從句。

URL 設(shè)計

松耦合

django應(yīng)用中的路由不應(yīng)該耦合到python代碼上赂鲤。將路由綁定到python函數(shù)名是一種不好而且丑陋的做法噪径。
沿著這些做法,django路由系統(tǒng)允許相同的應(yīng)用在不同的上下文中不同数初。例如找爱,一個站點把要存儲的內(nèi)容放在 /stories/ 中,又或者存放在 /news/中泡孩。

無限的靈活性

路由應(yīng)該盡可能的靈活车摄,任何能想象到的路由設(shè)計都應(yīng)如此。

鼓勵最佳實踐

框架應(yīng)該讓它對開發(fā)者而言變得簡單來設(shè)計漂亮的路由仑鸥。
網(wǎng)頁中的文件的擴展名應(yīng)該被隱藏吮播。

不可更改的路由

從技術(shù)上講,foo.com/bar 和 foo.com/bar/ 是兩個不同的路由眼俊,并且搜索引擎(和其他web分析工具)會把它們當做兩個不同的頁面意狠。django努力的標準化路由,目的是讓搜索引擎不再困惑疮胖。
這就是APPEND_SLASH設(shè)置背后的推論摄职。

模板系統(tǒng)

分離邏輯

我們把模板系統(tǒng)看做一個工具誊役,一個控制頁面展示和頁面展示相關(guān)邏輯的工具。
模板系統(tǒng)不應(yīng)該支持超過它基本目標的功能谷市。

阻止冗余

大多數(shù)動態(tài)網(wǎng)站使用一些常見的網(wǎng)站設(shè)計--通用的header,footer击孩,navigation bar迫悠,等等檬某。django模板系統(tǒng)應(yīng)該讓這些元素存儲在同一個地方更簡單全蝶,從而去除重復(fù)的代碼。
這就是template inheritance背后的設(shè)計哲學肋僧。

從HTML中解耦

模板系統(tǒng)不應(yīng)該設(shè)計為僅僅展示HTML括蝠。它應(yīng)該在生成基于文字的格式化方面同樣優(yōu)秀鞠抑,或者僅僅是文字。

XML不應(yīng)該用于模板語言

在編輯末班時忌警,使用XML引擎來解析模板引入了一個全新的錯誤--并且引發(fā)了一個在模板處理中不可接受的開銷搁拙。

假定設(shè)計者的能力

模板系統(tǒng)不應(yīng)該被設(shè)計,目的是模板必須被很好的展示在所見即所得的編輯器中法绵,比如Dreamweaver箕速。這是嚴重的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朋譬,隨后出現(xiàn)的幾起案子盐茎,更是在濱河造成了極大的恐慌,老刑警劉巖徙赢,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件字柠,死亡現(xiàn)場離奇詭異,居然都是意外死亡狡赐,警方通過查閱死者的電腦和手機窑业,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阴汇,“玉大人数冬,你說我怎么就攤上這事〔笫” “怎么了拐纱?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哥倔。 經(jīng)常有香客問我秸架,道長,這世上最難降的妖魔是什么咆蒿? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任东抹,我火速辦了婚禮蚂子,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缭黔。我一直安慰自己食茎,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布馏谨。 她就那樣靜靜地躺著别渔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惧互。 梳的紋絲不亂的頭發(fā)上哎媚,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音喊儡,去河邊找鬼拨与。 笑死,一個胖子當著我的面吹牛艾猜,可吹牛的內(nèi)容都是我干的买喧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼箩朴,長吁一口氣:“原來是場噩夢啊……” “哼岗喉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炸庞,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤钱床,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后埠居,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體查牌,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年滥壕,在試婚紗的時候發(fā)現(xiàn)自己被綠了纸颜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡绎橘,死狀恐怖胁孙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情称鳞,我是刑警寧澤涮较,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站冈止,受9級特大地震影響狂票,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熙暴,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一闺属、第九天 我趴在偏房一處隱蔽的房頂上張望慌盯。 院中可真熱鬧,春花似錦掂器、人聲如沸亚皂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孕讳。三九已至,卻和暖如春巍膘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芋簿。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工峡懈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人与斤。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓肪康,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撩穿。 傳聞我的和親對象是個殘疾皇子磷支,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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