全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

Django框架開(kāi)發(fā)遵循的原理是什么?

更新時(shí)間:2022-12-21 來(lái)源:黑馬程序員 瀏覽量:

開(kāi)發(fā)理念不僅是Django開(kāi)發(fā)者開(kāi)發(fā)Django之初的指導(dǎo)思想,也是Django發(fā)展和完善之時(shí)應(yīng)遵循的準(zhǔn)則。Django的使用者在使用Django框架時(shí)不應(yīng)與Django開(kāi)發(fā)者的理念相悖。了解Django開(kāi)發(fā)理念有助于理解Django框架。下面將介紹Django的開(kāi)發(fā)理念。

總體上,Django遵循各部分松耦合、代碼盡可能精簡(jiǎn)、保證Web開(kāi)發(fā)效率、避免重復(fù)、明確優(yōu)于隱式(保證不熟悉框架的人也能了解框架的工作,或能快速掌握框架的工作)這些理念,同時(shí)官方對(duì)Django的模型、數(shù)據(jù)庫(kù)API、URL設(shè)計(jì)、模板、視圖以及緩存框架這些部分的設(shè)計(jì)理念做了進(jìn)一步細(xì)化,具體分別如下:

1.模型

①明確優(yōu)于隱式。模型不應(yīng)僅基于字段名來(lái)假設(shè)某些行為,模型的行為應(yīng)基于關(guān)鍵字參數(shù)和字段類(lèi)型。

②定義模型表現(xiàn)的數(shù)據(jù)以及與數(shù)據(jù)相關(guān)的所有信息。模型應(yīng)按照Martin Fowler(馬丁·福勒)的Active Record(活動(dòng)記錄)設(shè)計(jì)模型,一個(gè)模型類(lèi)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)表,一個(gè)模型類(lèi)的實(shí)例對(duì)應(yīng)表中的一行記錄。

2.數(shù)據(jù)庫(kù)API

①保證效率。應(yīng)盡量少地執(zhí)行SQL語(yǔ)句、在內(nèi)部?jī)?yōu)化SQL語(yǔ)句。

②簡(jiǎn)潔、強(qiáng)大的語(yǔ)法。數(shù)據(jù)庫(kù)API語(yǔ)法應(yīng)以盡可能少的語(yǔ)法,實(shí)現(xiàn)豐富且準(zhǔn)確的語(yǔ)義。

③提供方便執(zhí)行原始SQL語(yǔ)句的方式。應(yīng)認(rèn)識(shí)到數(shù)據(jù)庫(kù)API只是一個(gè)便捷方式,而非最終的全部手段。Django框架應(yīng)具備容易編寫(xiě)自定義SQL語(yǔ)句的功能。

3.URL設(shè)計(jì)

①松耦合。Django應(yīng)用中的URL不應(yīng)與底層Python代碼耦合。

②無(wú)限靈活。網(wǎng)址應(yīng)盡可能靈活,任何可想到的URL地址都應(yīng)被允許。

③鼓勵(lì)最佳實(shí)踐。Django框架應(yīng)使開(kāi)發(fā)人員足夠容易地設(shè)計(jì)出漂亮的URLs。

④對(duì)URL進(jìn)行定義。技術(shù)上,foo.com/bar和foo.com/bar/是兩條不同的URL,搜索引擎與爬蟲(chóng)會(huì)將其視為獨(dú)立的頁(yè)面,Django會(huì)將其轉(zhuǎn)為“標(biāo)準(zhǔn)”的URL,讓搜索引擎與爬蟲(chóng)正確識(shí)別。

4.模板系統(tǒng)

①邏輯與表現(xiàn)分離。模板系統(tǒng)的基本目標(biāo)是控制表現(xiàn)方式和表現(xiàn)方式邏輯,它不應(yīng)支持超出基本目標(biāo)的功能。

②避免冗余。大多數(shù)動(dòng)態(tài)網(wǎng)站會(huì)使用一些網(wǎng)站整體通用的設(shè)計(jì),如頁(yè)眉、頁(yè)腳、導(dǎo)航欄等。Django模板系統(tǒng)應(yīng)可以很容易地存儲(chǔ)這些元素,從而減少代碼的重復(fù)。

③與HTML解耦。模板系統(tǒng)不應(yīng)被設(shè)計(jì)成只能輸出HTML,它應(yīng)該同樣擅長(zhǎng)生成純文本,或其他基于文本的格式。

④XML不應(yīng)被用于模板語(yǔ)言。如果使用XML去解析模板,在編輯模板的過(guò)程中會(huì)引入很多人為錯(cuò)誤,在模板處理中導(dǎo)致不可接受的開(kāi)銷(xiāo)。

⑤預(yù)設(shè)設(shè)計(jì)師的能力。Django模板系統(tǒng)不承擔(dān)保證模板可以在編輯器中友好顯示的功能,它期望模板編寫(xiě)者有直接編輯HTML文本的能力。

⑥顯式對(duì)待空格。模板系統(tǒng)不應(yīng)該支持空格實(shí)現(xiàn)更多的功能。如果模板包含空格,那么系統(tǒng)在處理文本時(shí)只需直接地顯示空格。

⑦不要發(fā)明一種編程語(yǔ)言。模板系統(tǒng)的目標(biāo)是提供足夠的、具有編程風(fēng)格的功能,比如分支和循環(huán),而不是發(fā)明一種編程語(yǔ)言;同時(shí)模板語(yǔ)言應(yīng)避免高級(jí)邏輯。

⑧安全和保障。拆箱即用的模板系統(tǒng)應(yīng)禁止包含惡意代碼,如刪除數(shù)據(jù)庫(kù)記錄的命令。這也是模板系統(tǒng)不允許有Python代碼的另一個(gè)原因。

⑨可擴(kuò)展。模板系統(tǒng)應(yīng)意識(shí)到高階的模板作者可能想擴(kuò)展其技術(shù)。

5.視圖

①簡(jiǎn)潔。編寫(xiě)視圖應(yīng)和編寫(xiě)Python函數(shù)一樣簡(jiǎn)單,開(kāi)發(fā)人員不應(yīng)該在函數(shù)執(zhí)行時(shí)實(shí)例化一個(gè)類(lèi)。

②使用請(qǐng)求對(duì)象。視圖應(yīng)該能夠訪問(wèn)一個(gè)請(qǐng)求對(duì)象——一個(gè)存儲(chǔ)關(guān)于當(dāng)前請(qǐng)求的元數(shù)據(jù)的對(duì)象。對(duì)象應(yīng)該直接傳遞給視圖函數(shù),而不必從全局變量訪問(wèn)請(qǐng)求數(shù)據(jù)的視圖函數(shù)。

③松耦合。視圖不應(yīng)該關(guān)心開(kāi)發(fā)人員使用哪種模板——甚至不關(guān)心開(kāi)發(fā)人員是否使用模板系統(tǒng)。

④GET和POST的區(qū)別。框架應(yīng)使得GET和POST數(shù)據(jù)很容易區(qū)分。

6.緩存框架

①更少的代碼。緩存應(yīng)該盡可能快,因此,圍繞緩存的所有后端框架代碼都應(yīng)該保持在絕對(duì)的最小值,特別是對(duì)于getO操作。

②一致性。緩存API應(yīng)該為不同的緩存后端提供一致的接口。

③可擴(kuò)展性。緩存API應(yīng)該基于開(kāi)發(fā)者的需求,在應(yīng)用程序級(jí)別上是可擴(kuò)展的。

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!