您好,登錄后才能下訂單哦!
這篇文章主要介紹了Django在web開發(fā)中的五個(gè)誤區(qū),具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
相信很多朋友或多或少的都嘗試過用Django或者是Flask來開發(fā)網(wǎng)站(以下用Django來做代表)。畢竟用Python做開發(fā)的速度就已經(jīng)快人家好幾倍了,何況是基于Python的web框架,那開發(fā)一個(gè)網(wǎng)站肯定“咔咔咔“幾下就完成了。然而現(xiàn)實(shí)卻是殘酷的,很多人在使用Django的時(shí)候,不僅沒有實(shí)現(xiàn)”咔咔咔“的效果,相反卻很難使用Django做出一個(gè)像樣的網(wǎng)站出來。明明書上講的,網(wǎng)上說的我都會(huì)了呀,到底還差在哪里?正所謂聽君一席話,勝讀十年書,今天我們就來聊一聊,為什么有的人學(xué)會(huì)了Django的各種招式,可還是不會(huì)做web開發(fā)。如果你覺得我說得對,歡迎下面留言,如果你覺得我說得不對,那就當(dāng)作笑話笑一笑吧。
其實(shí)出現(xiàn)以上問題,是因?yàn)橛械呐笥褜jango甚至對web開發(fā)的認(rèn)識不夠清晰。這里我列出了五點(diǎn),來糾正大家的一些誤區(qū)!
誤區(qū)一:Django的數(shù)據(jù)庫操作只是簡單的增刪改查。
很多朋友在網(wǎng)上找一些Django相關(guān)的資料學(xué)習(xí)完后,可以用Django的ORM框架實(shí)現(xiàn)一些數(shù)據(jù)的增刪改查,就覺得仿佛掌握了開啟未來之門的鑰匙,大為喜悅。熟不知這只是初級Django開發(fā)工程師的第一步。如果想用Django做出一個(gè)像樣的網(wǎng)站出來,你還需要學(xué)會(huì)更高級的技術(shù)。例如:“如何用ORM實(shí)現(xiàn)‘查詢沒有學(xué)全所有課的同學(xué)的id、姓名’等諸類復(fù)雜查詢”、“如何提高數(shù)據(jù)庫操作的效率”、“如何在模型定義的時(shí)候選擇合適的字段類型”、“如何定義多級評論模型”、“navie時(shí)間和aware時(shí)間對數(shù)據(jù)存取的影響”等。這些你可能之前想都沒有想過的問題,實(shí)際上是網(wǎng)站開發(fā)中的家常便飯。你若不知道這些技術(shù),如何用他們現(xiàn)你想要的功能?
誤區(qū)二:Django的模板是語言是萬能的。
很多同學(xué)在學(xué)會(huì)了DTL(Django Template Language)數(shù)據(jù)傳遞和渲染后,以為Django的模板語言跟Python一樣強(qiáng)大,可以做復(fù)雜的邏輯處理。但是實(shí)際上Django的模板語言能力非常有限,他在循環(huán)的時(shí)候沒有break和continue語句,在最新的Django2.0中甚至不能使用中括號([])語法取字典和列表中的值,更不能使用圓括號(())來執(zhí)行函數(shù)等等。這一切你以為都很正常的代碼,在模板中卻不支持!另外還存在一個(gè)誤解就是,DTL可以渲染AJAX異步加載的數(shù)據(jù),DTL只是負(fù)責(zé)生成一個(gè)模板,后期再修改頁面,DTL就無能為力了。但也不是說想要實(shí)現(xiàn)AJAX異步加載就不能使用DTL,DTL可以配合前端其他模板(比如arttemplate)來實(shí)現(xiàn)“加載更多”的功能。
誤區(qū)三:不需要了解HttpRequest和HttpResponse對象。
HttpRequest和HttpResponse是Django網(wǎng)絡(luò)處理過程中的兩個(gè)非常重要的對象。只有對這兩個(gè)對象有了足夠細(xì)致的了解,才能在寫代碼的時(shí)候做到信手拈來。比如要判斷這個(gè)請求是否是通過ajax請求我們可以通過request.is_ajax()來判斷,比如想要實(shí)現(xiàn)反爬蟲技術(shù),我們可以通過request.META中的key來判斷這個(gè)請求是不是由爬蟲發(fā)起的。另外,包括session處理,COOKIES數(shù)據(jù)提取等,都是通過這個(gè)對象實(shí)現(xiàn)的。而HttpResponse雖然不直接使用,但是我們卻一直在間接使用它或者他的子類,比如想要返回json數(shù)據(jù)我們不需要json.dumps再傳給HttpResponse,我們可以直接返回一個(gè)JsonResponse對象,比如想要實(shí)現(xiàn)一個(gè)“文件下載”的功能,我們應(yīng)該在response的響應(yīng)頭中設(shè)置Content-Disposition屬性并標(biāo)記文件名稱。這些,你都知道嗎?
誤區(qū)四:使用Django開發(fā)網(wǎng)站,不需要擔(dān)心安全問題。
雖然Django已經(jīng)做得足夠安全了。但是有些地方還是需要我們自己去把握。比如什么是CSRF攻擊,CSRF攻擊會(huì)造成什么危害(可以看下我的《CSRF攻擊實(shí)現(xiàn)ICBC轉(zhuǎn)賬》案例),如何防御CSRF攻擊,在表單和ajax中我們該用什么方式來確保沒有CSRF攻擊等。另外還有臭名昭著的XSS攻擊,如果用戶在評論區(qū)提交了一串a(chǎn)lert(‘hello’);代碼,以后我們渲染這條評論的時(shí)候該如何將這個(gè)代碼當(dāng)做普通字符串渲染。如果用戶是可信任的,上傳了“
這是紅色文字
alert(‘hello’);”,想要將“紅色文字”和“alert(‘hello’);”當(dāng)做普通字符串渲染,而“
”標(biāo)簽當(dāng)做代碼渲染,我們又該如何實(shí)現(xiàn)?更多的比如還有“SQL注入”、點(diǎn)擊劫持攻擊等。你不學(xué)習(xí),都不知道網(wǎng)絡(luò)上的世界是這么的危險(xiǎn)!
誤區(qū)五:做web開發(fā)只需要學(xué)會(huì)Django。
這是對Django誤解最深的一點(diǎn)。很多朋友以為做web開發(fā),只要學(xué)會(huì)了Django,就能開發(fā)出一個(gè)優(yōu)美的功能強(qiáng)大的網(wǎng)站。其實(shí)一個(gè)網(wǎng)站是由前端和后端組成,前端簡單來講就是瀏覽器中展示的頁面,需要通過HTML+CSS+JavaScript三套組合拳才能實(shí)現(xiàn)。另外除了Django和前端,一些第三方功能也是一個(gè)網(wǎng)站必備的元素。比如有短信驗(yàn)證碼的發(fā)送、圖形驗(yàn)證碼、郵件的發(fā)送、Memcached緩存優(yōu)化、分頁技術(shù)、視頻加密播放、支付功能、第三方登錄等。擁有這些功能,你的網(wǎng)站才算得上是一個(gè)給“人”用的網(wǎng)站!
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Django在web開發(fā)中的五個(gè)誤區(qū)內(nèi)容對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。