自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Django開(kāi)發(fā)人員最常犯的四大錯(cuò)誤及規(guī)避建議

譯文 精選
開(kāi)發(fā) 前端
雜亂的依賴關(guān)系和邏輯繁重的視圖等Django錯(cuò)誤會(huì)損害可維護(hù)性。隔離環(huán)境、固定依賴關(guān)系,并將邏輯轉(zhuǎn)移到模型中有助于獲得更清晰的代碼。

譯者 | 晶顏

審校 | 重樓

毋庸置疑,Python是最為流行的編程語(yǔ)言之一,且提供了如Django和Flask等框架。其中,Django在Python開(kāi)發(fā)人員群體中知名度極高,因其能夠?yàn)殚_(kāi)發(fā)人員提供高效的開(kāi)發(fā)流程和實(shí)用的設(shè)計(jì)。例如,對(duì)象關(guān)系映射工具(ORM)、路由以及模板特性等,均使開(kāi)發(fā)人員的工作更加便捷。

然而,盡管Django具備這些強(qiáng)大功能,卻也存在諸多問(wèn)題,諸如欠佳的應(yīng)用程序結(jié)構(gòu)、不合理的資源放置,以及視圖(fat view)和模型(skinny model)的邏輯編寫(xiě)等。這些類型的問(wèn)題不僅是Python新手開(kāi)發(fā)人員面臨的挑戰(zhàn),對(duì)于經(jīng)驗(yàn)豐富的Python開(kāi)發(fā)人員而言,同樣難以妥善應(yīng)對(duì)。

下文將列舉開(kāi)發(fā)人員在使用Django時(shí)最常犯的錯(cuò)誤,并提供相應(yīng)的規(guī)避建議。

1. 經(jīng)常使用Python的全局環(huán)境來(lái)處理項(xiàng)目依賴項(xiàng)

這個(gè)錯(cuò)誤通常是由不熟悉Python的環(huán)境隔離特性的Python新手開(kāi)發(fā)人員犯。在項(xiàng)目中,不能使用全局環(huán)境來(lái)管理項(xiàng)目依賴項(xiàng),因?yàn)檫@會(huì)引發(fā)依賴項(xiàng)沖突問(wèn)題。

此外,Python將無(wú)法同時(shí)使用同一依賴的不同版本。這將是一個(gè)重大問(wèn)題,因?yàn)椴煌?xiàng)目對(duì)同一依賴包可能有不同且相互沖突的版本需求,若使用全局環(huán)境,將難以滿足這些差異化要求。

可以通過(guò)隔離Python的環(huán)境來(lái)解決這個(gè)問(wèn)題,具體方法如下

使用虛擬環(huán)境

可以使用名為virtualenv的模塊,是一個(gè)用于在Python中構(gòu)建虛擬環(huán)境的工具。利用它創(chuàng)建的虛擬環(huán)境能夠與系統(tǒng)環(huán)境相互隔離。使用virtualenv將創(chuàng)建一個(gè)文件夾,其中包含Python項(xiàng)目使用這些包所需的所有重要可執(zhí)行文件。

Virtualenvwrapper

Virtualenvwrapper是一個(gè)全局安裝的Python包。它提供了一套完整的工具集,用于創(chuàng)建、刪除和激活虛擬環(huán)境。借助該工具,可將所有虛擬環(huán)境統(tǒng)一保存在一個(gè)文件夾中,便于集中管理和操作。

虛擬機(jī)(VM)

這是隔離環(huán)境的最佳方法之一,因?yàn)檎麄€(gè)虛擬機(jī)專用于的應(yīng)用程序。可以從包括VirtualBox、Parallels和Proxmox在內(nèi)的一系列工具中進(jìn)行選擇。此外,虛擬機(jī)與VM自動(dòng)化工具Vagrant集成使用,將實(shí)現(xiàn)更高效的環(huán)境管理,獲得超乎預(yù)期的效果。

容器

容器自動(dòng)化方面,Docker工具是不錯(cuò)的選擇。Docker擁有眾多第三方工具,還具備捕獲特性,能夠幫助用戶快速重建容器。并且,當(dāng)用戶熟悉Docker的運(yùn)行機(jī)制后,會(huì)發(fā)現(xiàn)它提供了許多實(shí)用的鏡像,如Postgres、MongoDB、Redis、PySpark等,這些鏡像可極大地簡(jiǎn)化項(xiàng)目開(kāi)發(fā)和部署過(guò)程,且Docker的使用也較為容易上手。

上述這些都可以用來(lái)掌握項(xiàng)目依賴項(xiàng)隔離和管理的最佳方法。

2.沒(méi)有在requirements.txt文件中固定項(xiàng)目依賴關(guān)系

啟動(dòng)Python項(xiàng)目時(shí),應(yīng)借助一個(gè)帶有requirements .txt文件的孤立環(huán)境來(lái)實(shí)現(xiàn)。當(dāng)開(kāi)發(fā)人員運(yùn)用pip/easy_install進(jìn)行軟件包安裝操作時(shí),還需將所安裝的軟件包添加至requirements.txt文件中。如此一來(lái),若后續(xù)在服務(wù)器上部署項(xiàng)目,過(guò)程將會(huì)簡(jiǎn)便許多。

不同版本的軟件包有不同的模塊、參數(shù)和函數(shù)。即使依賴關(guān)系中的一個(gè)小變化也可能導(dǎo)致軟件無(wú)法正常運(yùn)行。因此,在requirements.txt文件中固定依賴項(xiàng)的特定版本至關(guān)重要。

此外,Python中有一個(gè)可用的pip-tools列表,借助命令行工具,將能夠輕松地管理這些依賴項(xiàng)。這個(gè)工具很有用,因?yàn)樗鼤?huì)自動(dòng)生成一個(gè)requirement.txt文件,該文件有助于固定所有這些依賴項(xiàng),甚至能涵蓋一個(gè)完整的依賴項(xiàng)樹(shù)。

另外需要注意的是,應(yīng)在文件系統(tǒng)、S3文件夾、FTP以及SFTP中留存依賴文件的副本。

3.不了解基于函數(shù)的視圖和基于類的視圖的優(yōu)點(diǎn)

在Django中,視圖是一個(gè)接收Web請(qǐng)求并返回Web響應(yīng)的Python函數(shù)或類。視圖充當(dāng)數(shù)據(jù)模型(后端)和模板(前端)之間的橋梁。每當(dāng)用戶訪問(wèn)URL時(shí),Django都會(huì)將該請(qǐng)求路由到相應(yīng)的視圖,然后視圖處理該請(qǐng)求并返回響應(yīng)。

Django視圖可分為兩種類型:基于函數(shù)的視圖FBV)和基于類的視圖CBV)。兩者的用途相同,但在實(shí)現(xiàn)方面采用不同的方法。

基于函數(shù)的視圖(FBV)

基于函數(shù)的視圖易于編寫(xiě)和理解。它們是普通的Python函數(shù),接受HTTP請(qǐng)求并返回HTTP響應(yīng)。以下是基于函數(shù)的視圖(FBV)的好處:

  • 高度靈活性:FBV賦予了Python開(kāi)發(fā)人員極大的靈活性,使他們能夠利用任何Python函數(shù)作為視圖,該視圖還可以包括第三方庫(kù)和自定義函數(shù)。
  • 易于理解基于函數(shù)的視圖邏輯簡(jiǎn)單明了。因此,對(duì)于小型項(xiàng)目和簡(jiǎn)單視圖來(lái)說(shuō),FBV是一個(gè)很好的選擇。
  • 上手快:由于FBV采用了開(kāi)發(fā)人員更為熟悉的基于函數(shù)的語(yǔ)法結(jié)構(gòu),因此相較于CBV,Python開(kāi)發(fā)人員在學(xué)習(xí)和應(yīng)用FBV時(shí),能夠更加快速地掌握并投入使用 ,減少學(xué)習(xí)曲線帶來(lái)的時(shí)間損耗。

基于類的視圖(CBV)

另一方面,基于類的視圖(CBV)提供了一種更有條理、可重用的方式來(lái)定義視圖。在開(kāi)發(fā)過(guò)程中,無(wú)需將視圖編寫(xiě)為函數(shù)形式,而是將其定義為從Django內(nèi)置通用視圖繼承而來(lái)的Python類。這種方式具備如下突出優(yōu)點(diǎn):

  • 結(jié)構(gòu)化API的運(yùn)用:CBV不僅充分發(fā)揮了面向?qū)ο缶幊痰膬?yōu)勢(shì),還能夠借助結(jié)構(gòu)化API,使代碼結(jié)構(gòu)更加清晰,可讀性顯著增強(qiáng),從而提升代碼的可維護(hù)性。
  • 代碼可重用性高:CBV具有良好的可重用特性,通過(guò)子類化操作,開(kāi)發(fā)人員能夠輕松地對(duì)其進(jìn)行擴(kuò)展與修改,在不同項(xiàng)目模塊或功能點(diǎn)中復(fù)用相同的視圖邏輯,提高開(kāi)發(fā)效率,減少重復(fù)代碼的編寫(xiě)。
  • 接口一致性:為了有效管理各種不同版本的HTTP請(qǐng)求,CBV提供了統(tǒng)一且一致的接口。這使得在處理不同類型的請(qǐng)求時(shí),開(kāi)發(fā)人員能夠遵循相同的編程模式和接口規(guī)范,降低開(kāi)發(fā)過(guò)程中的錯(cuò)誤率。
  • 模塊化特性:基于類的視圖本質(zhì)上具有模塊化的特征,這使得開(kāi)發(fā)人員可以將復(fù)雜的視圖分解為更小的、獨(dú)立的可重用組件。每個(gè)組件專注于特定的功能實(shí)現(xiàn),有利于代碼的分工協(xié)作開(kāi)發(fā)以及后期的維護(hù)與升級(jí)。

4.在視圖(而非模型)中編寫(xiě)應(yīng)用邏輯

在視圖中編寫(xiě)邏輯,應(yīng)用程序將最終呈現(xiàn)出“厚”視圖、“薄”模型的情況。這種結(jié)構(gòu)存在一定弊端,因此避免此類錯(cuò)誤,并在模型(而非視圖)中編寫(xiě)應(yīng)用程序邏輯至關(guān)重要。

Django開(kāi)發(fā)人員可以進(jìn)一步將邏輯分解成小方法,然后將它們寫(xiě)入模型中。這將使他們能夠從多個(gè)來(lái)源(如前端UI、管理界面UI、API端點(diǎn)等)不同時(shí)間使用它。而且,開(kāi)發(fā)人員僅需編寫(xiě)幾行代碼就能實(shí)現(xiàn),從而避免了大量代碼的復(fù)制粘貼,有效提升代碼的簡(jiǎn)潔性和可維護(hù)性

具體來(lái)說(shuō),向用戶發(fā)送電子郵件時(shí),不應(yīng)在視圖中編寫(xiě)相關(guān)邏輯,而要通過(guò)電子郵件功能擴(kuò)展模型。這種將邏輯置于模型的做法還能使代碼更易于進(jìn)行單元測(cè)試。因?yàn)镻ython開(kāi)發(fā)人員可以在模型這一個(gè)地方對(duì)電子郵件邏輯進(jìn)行測(cè)試,無(wú)需在每個(gè)控制器中重復(fù)測(cè)試相同的電子郵件邏輯,大大提高了測(cè)試效率與準(zhǔn)確性。

所以,下次處理項(xiàng)目時(shí),請(qǐng)務(wù)必牢記構(gòu)建視圖、模型,以此優(yōu)化代碼結(jié)構(gòu),提升開(kāi)發(fā)質(zhì)量。

原文標(biāo)題:Mistakes That Django Developers Make and How To Avoid Them,作者:Sukhwinder Singh

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2024-11-08 15:22:08

2015-09-21 09:34:57

2010-03-20 20:35:33

2020-09-23 22:40:31

Python 開(kāi)發(fā)編程語(yǔ)言

2009-09-14 19:23:45

敏捷開(kāi)發(fā)

2023-02-02 08:00:00

SQLJava開(kāi)發(fā)

2012-02-20 16:45:40

Android開(kāi)發(fā)新手

2012-07-27 10:17:05

開(kāi)發(fā)

2020-12-13 17:54:36

開(kāi)發(fā)人員

2023-03-10 09:00:49

Swift開(kāi)發(fā)者工具

2010-05-10 09:10:51

Linux

2020-04-20 18:15:46

開(kāi)發(fā)自信技術(shù)

2018-07-10 04:44:45

SD-WAN廣域網(wǎng)網(wǎng)絡(luò)技術(shù)

2010-02-24 13:45:40

Python開(kāi)發(fā)人員

2013-01-10 10:30:36

云開(kāi)發(fā)

2020-05-25 16:36:19

開(kāi)發(fā)工具編碼

2019-04-24 08:56:34

Java開(kāi)發(fā)人員常犯錯(cuò)誤

2021-12-10 10:35:54

趨勢(shì)物聯(lián)網(wǎng)IOT

2020-05-17 16:10:36

開(kāi)發(fā)人員軟件開(kāi)發(fā)開(kāi)發(fā)

2022-09-12 15:51:38

JavaScrip開(kāi)發(fā)編程語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)