国产睡熟迷奷白丝护士系列精品,免费国产精品专区,亚洲精选中文字幕,性欲福利视频网网站

  • <pre id="344ob"></pre>
      1. <track id="344ob"></track>
      2. <button id="344ob"></button><small id="344ob"></small>
          資訊財(cái)經(jīng)娛樂(lè)科技汽車(chē)時(shí)尚企業(yè)游戲商訊消費(fèi)購(gòu)物微商

          Django開(kāi)發(fā)者常犯的7種錯(cuò)誤

          2020-03-29 10:29:28 來(lái)源: 閱讀:-

          Django是一個(gè)強(qiáng)大的web框架,但是它的強(qiáng)大也帶來(lái)了責(zé)任。在本文中,我們將討論即使是經(jīng)驗(yàn)豐富的Django開(kāi)發(fā)人員也會(huì)犯的常見(jiàn)錯(cuò)誤,但是大多數(shù)成功的Django項(xiàng)目遲早都需要處理這些錯(cuò)誤。

          重新發(fā)明輪子

          Django有很多現(xiàn)成的特性,甚至還有更多的第三方包。試著在寫(xiě)代碼之前“google”一下您想解決的問(wèn)題——可能已經(jīng)有一個(gè)功能豐富的解決方案了。

          您還可以使用在線(xiàn)目錄“Django項(xiàng)目”,其中“apps”類(lèi)別中(用于構(gòu)建項(xiàng)目的小組件)有超過(guò)3200個(gè)項(xiàng)目。以下是來(lái)自清單前兩頁(yè)的有趣包的簡(jiǎn)短示例:

          • Haystack:用于Django的模塊搜索

          • Django-taggit:用于Django的簡(jiǎn)單標(biāo)記

          • Django-guardian:用于Django的每個(gè)對(duì)象的權(quán)限

          • Django-activity-stream:從站點(diǎn)上的操作生成通用的活動(dòng)流。用戶(hù)可以跟蹤任何參與者的個(gè)性化流的活動(dòng)。

          額外提示:我強(qiáng)烈推薦使用cookiecutter-django啟動(dòng)一個(gè)新的Django項(xiàng)目。它有一個(gè)自定義的用戶(hù)模型,通過(guò)django-allauth進(jìn)行注冊(cè),通過(guò)Anymail發(fā)送電子郵件,以及許多與安全和部署相關(guān)的默認(rèn)設(shè)置。

          龐大的應(yīng)用程序結(jié)構(gòu)

          Django是一個(gè)松散耦合的框架,它不要求您以任何特定的方式來(lái)構(gòu)建web應(yīng)用程序。然而,經(jīng)驗(yàn)豐富的Django開(kāi)發(fā)人員有一種標(biāo)準(zhǔn)的做事方式。

          Django web應(yīng)用程序的基本單元是由一個(gè)或多個(gè)app組成的Django項(xiàng)目。Django app是一個(gè)自包含的包,它應(yīng)該只做一件事。例如一個(gè)博客、會(huì)員app或事件日歷。

          Django app可以包含Python模塊、特定于Django的模塊(視圖、URL、模型、表單等)、靜態(tài)文件、數(shù)據(jù)庫(kù)遷移、管理命令、單元測(cè)試等等。您應(yīng)該使用簡(jiǎn)單的邏輯將您的項(xiàng)目劃分為小型的、可重用的應(yīng)用程序。

          使用這樣的結(jié)構(gòu),相關(guān)的功能將更緊密地結(jié)合在一起,從而允許您和您的團(tuán)隊(duì)更清楚地看到您的應(yīng)用程序的全貌。最重要的是,您可以將該應(yīng)用程序?qū)С龅搅硪粋€(gè)項(xiàng)目中并再次使用它,甚至可以將它作為一個(gè)開(kāi)源模塊發(fā)布在PyPi上。

          編寫(xiě)健壯的視圖和骨感的模型

          Django的體系結(jié)構(gòu)可以描述為一個(gè)模型-模板-視圖(MTV)或模型-視圖-模板(MVT)。

          模型是大多數(shù)業(yè)務(wù)邏輯存在的地方。它被定義在models.py中,并存在于應(yīng)用程序目錄中。它還包括將結(jié)果傳遞給視圖和模板層的數(shù)據(jù)庫(kù)查詢(xún)。

          視圖由處理用戶(hù)交互的代碼組成,如處理用戶(hù)提交的表單和修改數(shù)據(jù)庫(kù)中的結(jié)果以適應(yīng)您的模板。它被定義在views.py中。

          如果您沒(méi)有在模型中編寫(xiě)應(yīng)用程序的邏輯并使用視圖,這意味著您在基于視圖的模型中編寫(xiě)了代碼。這使得視圖“健壯”,而模型“骨感”。模型應(yīng)該健壯一些,而視圖應(yīng)該骨感一些。

          您還應(yīng)該利用自定義管理器。例如,自定義管理器可以提供with_counts方法,該方法會(huì)返回一個(gè)所有OpinionPoll對(duì)象的列表,每個(gè)對(duì)象都有一個(gè)額外的num_responses屬性,該屬性是聚合查詢(xún)的結(jié)果。有關(guān)更多信息,請(qǐng)查看內(nèi)置的UserManager。

          每個(gè)視圖有太多的查詢(xún)或未優(yōu)化的查詢(xún)

          人們經(jīng)常指責(zé)Django的ORM執(zhí)行了太多的查詢(xún)或未優(yōu)化的查詢(xún)。但是我們?cè)谄渌蚣艿腛RM中也能看到這種情況。

          真正的問(wèn)題是我們常常沒(méi)有意識(shí)到性能問(wèn)題及其根源。一旦您發(fā)現(xiàn)了瓶頸所在,您就可以選擇正確的方法來(lái)解決它們。從這里你可以做很多事情,但最有可能的是:

          • 修復(fù)普通中斷的ORM查詢(xún)(比如,預(yù)取)

          • 調(diào)整和優(yōu)化ORM查詢(xún)

          • 在正確的位置添加緩存

          • 提供更多的資源

          django-debug-toolbar是一個(gè)非常棒的調(diào)試工具。您可以使用它來(lái)跟蹤SQL查詢(xún)、請(qǐng)求、模板、緩存等等中的性能問(wèn)題。這個(gè)小工具包將幫助您快速識(shí)別問(wèn)題。我強(qiáng)烈推薦您使用它。

          冗余的模型字段

          由于查詢(xún)不能使用計(jì)算列,而且添加一個(gè)實(shí)際的列只需“進(jìn)行遷移”,因此,開(kāi)發(fā)人員通常會(huì)以不同的方式復(fù)制表示相同數(shù)據(jù)的字段。

          &gt;&gt;&gt; 今日簽到口令:1bof &lt;&lt;&lt;

          很快,您的半數(shù)車(chē)輛都有is_motorcycle == True和wheel_count == 4字段,并且您不確定應(yīng)該信任哪個(gè)字段(提示:兩者都不是)。

          使用Django,您可以像這樣使用@property裝飾器來(lái)重構(gòu)不一致的屬性。然而,雖然ORM允許您以屬性的形式去訪(fǎng)問(wèn)列,但反之則不正確,因此您必須手動(dòng)重構(gòu)每個(gè)查詢(xún)。

          沒(méi)有在模型上添加索引

          即使是經(jīng)驗(yàn)豐富的Django開(kāi)發(fā)人員也會(huì)忘記索引。請(qǐng)務(wù)必向您的模型添加索引!另一方面,不要對(duì)所有東西都進(jìn)行索引,因?yàn)檫@會(huì)減慢插入、更新和刪除的速度。一般來(lái)說(shuō),您希望用于篩選或查詢(xún)的任何內(nèi)容都有一個(gè)索引。分析您的查詢(xún)集以確定哪里需要索引。

          不一致的數(shù)據(jù)驗(yàn)證

          Django模型可以與一個(gè)或多個(gè)用于創(chuàng)建和更新模型實(shí)例的“表單”相關(guān)聯(lián)。表單有很多默認(rèn)行為,特別是驗(yàn)證,這是由模型的屬性控制的。實(shí)際上,模型的許多屬性的存在只是為了控制表單的默認(rèn)行為。

          許多Django開(kāi)發(fā)人員忘記了模型不僅僅可以通過(guò)它的表單進(jìn)行修改。他們也忘記了跟蹤約束在哪里。非空嗎?那是模型上的。在一個(gè)字段上定義選項(xiàng),顯式枚舉它可以具有什么值?那是在表單上。唯一性嗎?在模型上。等等。

          這種不一致的驗(yàn)證會(huì)導(dǎo)致糟糕的用戶(hù)體驗(yàn):預(yù)先填充了一個(gè)對(duì)象的現(xiàn)有數(shù)據(jù)的表單,會(huì)由于現(xiàn)有數(shù)據(jù)無(wú)效而無(wú)法提交。

          總結(jié)

          Django旨在幫助開(kāi)發(fā)人員盡可能快地構(gòu)建軟件。然而,在匆忙添加新功能時(shí),很容易會(huì)忘記一些東西或放松對(duì)全局的考慮。在本文中,我們討論了Django開(kāi)發(fā)人員經(jīng)常犯的一些常見(jiàn)錯(cuò)誤以及避免這些錯(cuò)誤的方法。

          即使您是一名熟練的Django開(kāi)發(fā)人員,這個(gè)清單也應(yīng)該會(huì)很有用,因?yàn)橄駴](méi)有在模型上添加索引或不一致的數(shù)據(jù)驗(yàn)證之類(lèi)的錯(cuò)誤,不僅僅限于新開(kāi)發(fā)人員。

          如果您喜歡這篇文章,那么您應(yīng)該看看《Django作為Python開(kāi)發(fā)人員web框架的優(yōu)點(diǎn)和缺點(diǎn)》一文。

          英文原文:https://www.softkraft.co/7-common-mistakes-that-django-developers-make/
          譯者:憂(yōu)郁的紅秋褲

          推薦閱讀:懶人洗襪子小竅門(mén)

          查看心情排行你看到此篇文章的感受是:


          • 支持

          • 高興

          • 震驚

          • 憤怒

          • 無(wú)聊

          • 無(wú)奈

          • 謊言

          • 槍稿

          • 不解

          • 標(biāo)題黨
          要聞排行
          精彩推薦