1. 程式人生 > >為什麽我學會了Django/Flask,還是不會做Web開發?

為什麽我學會了Django/Flask,還是不會做Web開發?

box dumps pan 開發網站 white 信號 標簽 查詢 圖片

相信很多朋友或多或少的都嘗試過用Django或者是Flask來開發網站(以下用Django來做代表)。畢竟用Python做開發的速度就已經快人家好幾倍了,何況是基於Python的web框架,那開發一個網站肯定“哢哢哢“幾下就完成了。然而現實卻是殘酷的,很多人在使用Django的時候,不僅沒有實現”哢哢哢“的效果,相反卻很難使用Django做出一個像樣的網站出來。明明書上講的,網上說的我都會了呀,到底還差在哪裏?正所謂聽君一席話,勝讀十年書,今天我們就來聊一聊,為什麽有的人學會了Django的各種招式,可還是不會做web開發。如果你覺得我說得對,歡迎下面留言,如果你覺得我說得不對,那就當作笑話笑一笑吧。

其實出現以上問題,是因為有的朋友對Django甚至對web開發的認識不夠清晰。這裏我列出了五點,來糾正大家的一些誤區!

## 誤區一:Django的數據庫操作只是簡單的增刪改查。

很多朋友在網上找一些Django相關的資料學習完後,可以用Django的ORM框架實現一些數據的增刪改查,就覺得仿佛掌握了開啟未來之門的鑰匙,大為喜悅。熟不知這只是初級Django開發工程師的第一步。如果想用Django做出一個像樣的網站出來,你還需要學會更高級的技術。例如:“如何用ORM實現‘查詢沒有學全所有課的同學的id、姓名’等諸類復雜查詢”、“如何提高數據庫操作的效率”、“如何在模型定義的時候選擇合適的字段類型”、“如何定義多級評論模型”、“navie時間和aware時間對數據存取的影響”等。這些你可能之前想都沒有想過的問題,實際上是網站開發中的家常便飯。你若不知道這些技術,如何用他們現你想要的功能?

## 誤區二:Django的模板是語言是萬能的。

很多同學在學會了DTL(Django Template Language)數據傳遞和渲染後,以為Django的模板語言

技術分享圖片


跟Python一樣強大,可以做復雜的邏輯處理。但是實際上Django的模板語言能力非常有限,他在循環的時候沒有break和continue語句,在最新的Django2.0中甚至不能使用中括號([])語法取字典和列表中的值,更不能使用圓括號(())來執行函數等等。這一切你以為都很正常的代碼,在模板中卻不支持!另外還存在一個誤解就是,DTL可以渲染AJAX異步加載的數據,DTL只是負責生成一個模板,後期再修改頁面,DTL就無能為力了。但也不是說想要實現AJAX異步加載就不能使用DTL,DTL可以配合前端其他模板(比如arttemplate)來實現“加載更多”的功能。

技術分享圖片


## 誤區三:不需要了解HttpRequest和HttpResponse對象。

HttpRequest和HttpResponse是Django網絡處理過程中的兩個非常重要的對象。只有對這兩個對象有了足夠細致的了解,才能在寫代碼的時候做到信手拈來。比如要判斷這個請求是否是通過ajax請求我們可以通過request.is_ajax()來判斷,比如想要實現反爬蟲技術,我們可以通過request.META中的key來判斷這個請求是不是由爬蟲發起的。另外,包括session處理,COOKIES數據提取等,都是通過這個對象實現的。而HttpResponse雖然不直接使用,但是我們卻一直在間接使用它或者他的子類,比如想要返回json數據我們不需要json.dumps再傳給HttpResponse,我們可以直接返回一個JsonResponse對象,比如想要實現一個“文件下載”的功能,我們應該在response的響應頭中設置Content-Disposition屬性並標記文件名稱。這些,你都知道嗎?

技術分享圖片


## 誤區四:使用Django開發網站,不需要擔心安全問題。

雖然Django已經做得足夠安全了。但是有些地方還是需要我們自己去把握。比如什麽是CSRF×××,CSRF×××會造成什麽危害(可以看下我的《CSRF×××實現ICBC轉賬》案例),如何防禦CSRF×××,在表單和ajax中我們該用什麽方式來確保沒有CSRF×××等。另外還有臭名昭著的XSS×××,如果用戶在評論區提交了一串<script>alert(‘hello’);</script>代碼,以後我們渲染這條評論的時候該如何將這個代碼當做普通字符串渲染。如果用戶是可信任的,上傳了“<p style=’color:red;’>這是紅色文字</p><script>alert(‘hello’);</script>”,想要將“紅色文字”和“<script>alert(‘hello’);</script>”當做普通字符串渲染,而“<p>”標簽當做代碼渲染,我們又該如何實現?更多的比如還有“SQL註入”、點擊劫持×××等。你不學習,都不知道網絡上的世界是這麽的危險!

## 誤區五:做web開發只需要學會Django。

這是對Django誤解最深的一點。很多朋友以為做web開發,只要學會了Django,就能開發出一個優美的功能強大的網站。其實一個網站是由前端和後端組成,前端簡單來講就是瀏覽器中展示的頁面,需要通過HTML+CSS+JavaScript三套組合拳才能實現。另外除了Django和前端,一些第三方功能也是一個網站必備的元素。比如有短信驗證碼的發送、圖形驗證碼、郵件的發送、Memcached緩存優化、分頁技術、視頻加密播放、支付功能、第三方登錄等。擁有這些功能,你的網站才算得上是一個給“人”用的網站!

技術分享圖片


技術分享圖片


以上只是我們列出來大家對Django或者web開發誤解的一部分,因為篇幅原因,其中還有更多技術細節無法一一列出來,比如“權限管理到底要怎麽管理”、“什麽時候該使用信號”、“上下文處理器和中間件是怎麽一回事”等。


為什麽我學會了Django/Flask,還是不會做Web開發?