關於python Django與Flask學習的一些疑惑?
提問1:對著vamei先生博客中django代碼挨個敲了一遍,但是其實其中有些概念還不是很懂,是需要繼續複習嗎?
Python - 標籤提問2:django進階需要學習什麼呢?提問3:需要做到什麼條件能找到一份實習生工作,比如說開發出一個網站或者其他?謝謝各位的關注和解答。
謝邀。需要複習,vamei的博客我沒有看,當時入門是看的django的官方例子,就是那個polls教程。你首先要明白django的MTV和MVC的對應關係,並且理解MVC,才能對django有個較好的理解。Django進階學習,建議參看Two Scoops of Django: Best Practices for Django 1.8 以及 Django Design Patterns and Best Practices 這兩本書,裡面有很多經驗之談,網上能下載到。另外圖靈出版社引進了一本書圖靈社區 : 圖書 : Python Web開發:測試驅動方法 這本書也是講django的,如果不喜歡讀原版,讀這本也很好,順便把TDD也一起學了。想要找份django的工作的話,我建議還是用django做個完整的網站,放到SAE(網站連接 - 新浪雲計算)上(SAE免費就夠用了),然後到拉鉤上投投簡歷試試看。多多努力,祝你好運!---------------update-------------------下面這個摘自5天學會一種 web 開發框架,裡面對web框架常用功能進行了一個梳理,不管是不是django,這些都是通用的,你可以對照這個來進行學習。
5天學會一種 web 開發框架
web framework層出不窮,特別是ruby/python,各有10+個,php/java也是一大堆
根據我自己的經驗寫了一個to do list,按照這個清單,一條一條的學習,事半功倍,很快就能掌握
一共25條,即便很磨蹭,2小時也能搞定一條,25*2=50。只需要50小時就能掌握任意一種web框架各類web框架大同小異:現代web開發框架的6大元素,把握主線,就不會迷路
建議把本文列印到一張A4紙,搞定一條打個勾
web框架學習列表
- 如何定義 url route
如何組織 request handler 函數
- 寫一個最簡單的request handler 函數
- 如何從get/post請求中取出參數
- 如何定義全局url 攔截函數
- 如何獲取/修改/存儲 cookie,session數據
- 如何修改/輸出 http header 數據
如何部部署app 程序
- 伺服器部署可以參考讀python web 程序的9種部署方式
- 如何配置開發環境
- 如何配置靜態文件訪問
如何訪問資料庫
是否支持ORM
支持orm
- 如何維護表結構的變更
- 如何定義/組織/初始化 數據表
- 如何對接orm系統和現有的表結構
- 掌握最基本的add/delete/按欄位查詢/count/slice/order by
- 如何直接使用sql 訪問資料庫
不支持orm (這樣的web框架,不用也罷)
如何使用模板系統
- 如何組織/訪問 模板文件的目錄結構
- 如何在模板中嵌入代碼
- 模板是否支持繼承結構
- 模板之間如何include
- 如何自定義模板函數
如何通過http get/post 獲取遠程數據
- 如何parse json
- 如何parse xml
- 如何輸出為 json
- 如何處理狀態碼:404和50x
- 如何處理文件上傳
可選的學習項目
- 發送email
- log
- 圖片處理
誤區
- 表單驗證輔助函數,很多框架的表單驗證部分實現的特別複雜,初學者完全不需要,手寫代碼處理就夠用
- ORM中的hasone,manytomany,onetomany關係,概念很複雜,其實只是多寫/少寫一個查詢欄位的關係,學習成本太高,初學者完全不需要理會,直接跳過
不請自來,冒昧說幾句敢問題主是在校學生準備找工作么?
如果是的話,大多數情況,其實你會不會開發網站與能否找到實習工作關係不大。實習的時候,給你安排工作的人會根據你的個人情況進行一個簡單的評估。如果你是一個畢業生,那麼,公司會更看重你的潛力(比如個人的學習能力,表達能力,溝通能力等),至於你會什麼,其實不是特別重要。畢竟大部分人自學的東西,相比公司項目中磨練出來的項目經驗和技術還是有差距的。
下面回歸正題針對問題逐一解答下:回答1:大部分博客、教程裡面的內容的受眾都是初學者,目的是希望沒有經驗的人能快速入門上手。題主覺得很多概念不懂太正常了,要是看看教程就能把django或者任意一個框架就弄明白,那確實是天資聰穎,骨骼清奇,實在是百年難得一遇的練武奇才,不,編程奇才!之於是不是需要繼續複習,我個人覺得,如果你沒有什麼極為強烈的目的或者要應用於某個項目的話,那就別複習了。為什麼這麼說呢,如果不是有極強目的性的學習,大部分時候過一段時間就忘了。而且,僅僅停留於學習層面而不運用於實踐的話,是很難談得上會的。問題2:有關django進階學習的問題,我猜測題主可能不怎麼懂web技術的對么?進階django我覺得可以有兩個方向:方向一:從django源碼入手,你可以仔細看看url是怎麼映射的,模板的渲染是怎麼實現的,django的認證系統是怎麼實現的等等;方向二:從web服務的各個環節入手,比如,django的模板渲染可以使用jinja2替代,如果覺得django的認證不和要求,怎麼自己去定製?比如如何支持email、mobile、用戶名、id四類方式同時登錄認證?django如何與uwsgi結合使用?django的底層orm如何使用其他的orm框架等等。這些替換或者研究會讓你從web開發的各個環節更深入的了解django的優勢和不足。問題3:實習生找工作,最重要的是自信,你需讓面試官感受到你是有潛力的,你是有可塑性的,你是值得留下的!而這,和你會不會開發出一個網站,沒有太大關係,你的技術只能說明你的過去,輝煌的過去抵不過一個充滿希望的未來。而且,自學的那一丁點東西,在入職培訓後或者參加實際工作中看起來是微不足道的。(不是說自學的東西沒價值,只是工作中很多東西比較與針對性,深度和實用性比自學來的更恰到更適合,工作中相對某一點的研究也更深刻)################################################################################原本還想要寫點我自己在工作中學習django的經歷,不過午飯時間到了,餓餓餓……如果題主有興趣,我可以在介紹我的學習django、flask或者Python的經歷end 2015-10-23 中午
################################################################################其實我是早上犯困的時候偷偷刷知乎才寫的之前的回答,噓……
感謝大家的支持,我大致講講我的django/Python學習經歷,可能會有些廢話,大家多見諒哈。
估計一些人是才畢業或者剛進入IT行業吧,新人或者才進入IT行業總有些類似的想法:我會什麼技術好找工作?學什麼語言好賺錢?這樣的問題我也想過很多。我工作也才3年多而已,我沒法回答學什麼有前途/錢途,也沒法回答學什麼技術好找工作,更沒法回答什麼語言未來有希望。我能講的只有我作為一個有那麼一丁點工作經驗的軟體開發的切身經歷而已。
我是12年夏天畢業的,本科數學。考過研,沒考上,被計算機組成原理和計算機網路虐慘了。為什麼從事計算機行業?兩個原因:其一,計算機是數學的分支;其二,大學一開始就有那麼個不是很清晰萌芽一樣的模糊混沌也不知道為啥的想法——要寫代碼做研發。
大學畢業時候自己擁有IT相關的本錢:學過數據結構,考過二級C語言,學過資料庫基礎(只會寫SELECT * FROM xxx,
到了WHERE基本就不會寫了,ALTER、UPDATE、DELETE一寫一個錯那種),用http://ASP.NET開發過極為簡單的數據查詢頁面(一個白色的輸入框寫填日期,一把查出所有的資料庫數據,就這麼簡單),大學Java課程要求的大作業寫了個貓捉老鼠的小遊戲,參加過數學建模寫過MATLAB。
就這麼多,說多不多,說少不少,和大多數人一樣普通。我那些計算機專業的同學會的比這多好多。
12年7月 入職,那時候項目要求用C#
WPF寫一些PC上的帶界面的工具,一直寫到13年12月份,那時候沒有用資料庫。工作中順帶學習了點雜七雜八的東西,也沒個啥重點。
到了13年2月,工作調整,被指派用django做一個HTTP服務,對外提供數據查詢介面,底層使用完全沒有接觸過的非關係型資料庫MongoDB。對我來講幾乎完全是新的事物,Python、Django、MongoDB、HTTP、Nginx、Linux基本操作、服務發布和部署等等。那時候我用的Django是1.4的版本,一開始就完全是瞎子摸象,對於框架的概念都不怎麼清晰,但是項目明確要求:半個月出基本API介面,1個月出全部介面,2個月穩定上線。擦嘞個擦擦,要麼干要麼認輸,那就干唄!
開始的時候先找了個有經驗的開發,幫我搭建了個框架,然後迅速寫了個最簡單的數據查詢GET介面,瀏覽器直接訪問一個URL,只返回一個簡單的json數據,返回的數據都是代碼里寫死的。當時完全不知道request是啥,session是啥,為啥瀏覽器里輸入下就能調用到我的代碼裡面,全是混沌的。當時我也有不止一次去嘗試通讀一邊djangobook,但是有人依賴我的介面,必須儘快開發啊,根本沒時間認真學習。當時一位同事告訴我了一句話:It works, it works well, how it work?
簡單講就是先出東西,在把出的東西優化,最後再去考慮這貨是怎麼個原理。這句話簡直顛覆了我從學校帶來的那種先學習在實踐的認知。
當時開發的時候用的工具時PyCharm和IPython。PyCharm絕對是新手編程的好東西,尤其是在寫代碼的時候仔細看看邊欄的語法優化提示,是很有助於新手規範編碼和避免一些低級的錯誤的。IPython是一個增強版的python命令行,支持Tab補全,一些簡單的語法測試,或者是小的語法片段我都直接在裡面寫寫試試,沒問題直接就粘貼到正式代碼里。
再有就是有了什麼問題就網上搜,搜索詞要準確,同事們稱之為「放狗要准」,放出去就要捕到獵物。及時找同事討論,找有經驗的同時諮詢學習。平時多思考,使勁思考,反正腦子用不壞。我提高最大的時候,也是我最專註最刻苦的時候。一開始不知道HTTP是啥,總覺得和HTML好像有啥關係(都是H開頭哈哈)。再後來為了設計REST風格的API,查找了豆瓣、Google、Facebook、淘寶、百度、騰訊、新浪等十多個網站的API設計,當時收藏夾收集了幾十個網站的開發者頁面。讀開發者文檔、分析URL含義、猜測傳參含義、截取HTTP請求,最終覺得豆瓣的URL設計比較符合我們項目的需求。還有MongoDB怎麼去增刪改查?怎麼和我們的服務結合起來?Django的ORM框架挺好,支持主流的關係型資料庫,但是MongoDB這種非關係型的只能自己手寫了。那時候有一個用關係型資料庫的方法去操作MongoDB的庫,具體啥名字記不起來了,但那個有局限性,我們存在MongoDB中的數據又是比較靈活的,所以只能自造一些方法去讀寫MongoDB了。由於需要進行一些分組統計查詢,又不得不寫一些Map-Reduce,或者寫一段JavaScript直接放在Mongo中執行。JS之前我是完全不會的,就硬著頭皮上吧。還有就是Nginx,配置路徑的時候^~*一堆稀奇古怪的符號,位置還不能錯。為了提高django性能,於是研究怎麼把django+uwsgi+nginx結合在一起也花了些功夫。
當然,這些學習都是下班後和周末學習的,工作的時候沒有那麼多時間給我學習。組長告訴我:「工作的時候看書說明你閑,沒人花錢雇你來看書,工作的時候就要工作,產生價值,看書學習是你自己的事,不能佔用工作時間。」現在想來,誠然如此。
具體關於django學習的東西,我翻閱的最多的就是官方文檔,以及中文版的django book,翻譯略有瑕疵,但網友的修正注釋都挺不錯。當時我沒有讀完django book,因為沒有時間那麼做。由於工作只需要使用django提供REST風格的API介面,所以我反覆研究的是視圖與URL。我到現在都記不住urls.py要引入哪個模塊。我不是不會,而是我覺得不需要記,我知道從哪能找到就行,知道什麼原理就行,具體引用哪個模塊,迅速找到代碼,粘貼下就好了。把更多的時間用在邏輯的思考上,能不記憶的都不記。
最終2個月結束的時候我按時完成了任務。
這兩個月也確實是我成長最快的時候,有明確的目的,並且我自己確實很喜歡Python,然後一瞬間也就這麼過來了。
========
審慎一些,需要說明的是,之前部門內部人員匱乏,DBA和運維人員都很少,所以才會導致大量任務只由幾個開發人員負責的臨時情況。2個月完成了任務後,雖然上線了,但是確實有不少問題存在,而且上線後只在局部地區進行了使用,經過了大致3輪的迭代修復完善才逐步保證了服務的穩定。
========
13年5月份的時候工作不怎麼忙,於是自己可以慢慢理解下MTV和MVC是什麼,但是由於我們的項目一直沒有前端頁面開發的需求,也沒有使用關係型資料庫,所以那個時候也就僅僅是知道什麼是MTV,具體為什麼這麼設計?怎麼去用?還是很生疏的。
13年7月後,項目需要我被安排去做Java相關的開發,期間主要使用了Spring、Mybatis、MySQL等技術,同時使用Python寫不少客戶端或者小工具。說實話,我遇到Python後就感覺像是遇到了生命中的另一半的感覺(哇咔咔,是不是濃濃的屌絲程序猿的感覺啊,哈哈),寫Java的時候就是感覺不爽,雖然我開發java的時間是我Python的兩倍多,但是我還是很喜歡用python,自認為是一個忠實的pythoner。
在使用SpringMVC的時候,我對於web框架的認識更深了一步,對比django,逐漸理解認識了web框架一些公共的東西,比如URL的轉發、序列化與反序列化、HTTP請求的格式和使用、資料庫關係型和非關係型的聯繫與區別等。不得不說,我在看到SpringMVC使用@註解方式來設置URL路徑的時候確實感覺眼前一亮。相比django的urls.py的方式,各有利弊,那是我就在想,python自己也有@裝飾器,那麼python能不能也使用@的方式去寫url呢?後來沒有仔細深入思考過這個想法。
一直寫Java寫到了15年2月份,我才再次用django寫了個網站。這個時候,我已經熟悉了Mongo和MySQL資料庫,同時也有了一定的web開發的經驗,會寫了JS,簡單會用bootstrap,URL設計,緩存的設計也都差的不多清楚了。於是三下五除二,一周時間就完成了一個個人任務管理的網站,當然是內部使用而已。之前一是沒有時間去了解django的auth模塊,這個時候剛好需要登錄和用戶創建相關的開發,於是就研究了下auth,感覺和之前見過的一些框架的認證有類似的地方。由於有了很多積累,經驗也差不多了,所以就看看文檔,找找demo就開發完了。
15年3月某個早上,很偶然的看到了flask,由於flask網站界面和jinja2很像,所以就看了看官方的快速入門……
卧槽!卧槽!卧槽!這東西真的太棒了!
模塊簡潔,命名方式簡單,而且這貨竟然真的實現了我之前使用@設置URL的想法。剛好那個時候需要開發一個數據查詢並且渲染成圖表展示的小網站,於是我就用flask試了下,全新的框架,包括資料庫設計,從前到後,到最終內部上線,也就2周時間。Flask確實夠簡潔,開發小型的網站還是很順手的。我記得以前看過有人講過(具體是誰記不得了),框架對於新手是有用的,逐漸有經驗後,框架能帶來的好處越來越少。誠然如此。
如果是新手想系統地學習下web開發的話,django還是很適合的,而有經驗的人會覺得不夠快,略顯臃腫;而flask輕巧,對於新手來講顯得單薄,很多功能需要自己配置或者重新開發。
洋洋洒洒講了這麼多,我技術自認為湊合而已,講的中間參雜了不少自己的經歷,可能並沒有過多的講述django或者flask學習的具體細節,簡單總結下吧:
1. 項目驅動是很重要的,多數人在明確的任務或者強烈的愛好的驅使下,學習才會有成效,才談得上掌握和使用;
2. 學習django、flask這類web框架的時候,不要局限於框架本身,要從web開發的各個環節入手,積攢相關的知識。多了解幾個框架沒有壞處,相互之間觸類旁通,不斷的對比分析,自己多總結;
3. 多思考,用自己的想法去揣測分析django的設計原理,思考自己的薄弱環節,思考怎麼去合理的分配時間,思考自己的近期目標,思考及自己的中長期目標,思考自己要在什麼時候掌握什麼等等。
工欲善其事,必先利其器,最後推薦幾個我常用的和Python、django、flask開發相關的工具或包:
1. PyCharm——Python開發首選IDE
2. IPython——增強的Python命令行工具,很適合開發時小段代碼的測試
3. pip——python的包管理工具,建議國內使用的時候配置下源,推薦使用阿里的源,見pypi
4. virtualenv——python虛擬環境搭建工具,可以較好的隔離多個python開發環境
其它的工具我就不一一列舉了
我愛Python Y(^o^)Y
最後,祝大家好運!
哇咔咔!
end 2015-10-23 晚
你先開發一個網站,就知道做到什麼程度可以開發一個網站了。我的博客就是邊學邊開發的。
恰好,最近也在學django。題主的3個問題其他朋友已經回答了很多。
既然知道要學django框架,那肯定是有些編程經驗的,初學者應該學的是語言本身。所以所有內容都默認已經學會python,有一些編程經驗。
我來說一說大概怎麼學django吧。我開始學django是2015年12月26日,就是半個月前。
我首先是花了5天看完django1.9的文檔。這5天就純看文檔了,半句代碼都沒敲。Django documentation 有一點點英文基礎配上字典就能看懂Django 文檔 如果英文實在不願意看,就看這個,1.8.2的中文版本(不全)文檔本身就是介紹django的一些規定和用法。所以看文檔的時候除了大略有個映像,知道哪個功能要怎麼用以外,看完每一章還需要具體思考一下:django的這種做法有什麼優勢?有沒有可以更進的地方。通過問題來回顧整章內容。看完代碼以後,需要一個小項目或者叫小練習來驗證文檔所學,我選擇的是一個 多人博客。2015年12月30日正式開始。
文檔中有個poll的應用,基本闡述清楚了django是一個怎樣的架構。django中主要就views,model,url,template等內容。弄清楚這四塊以後,想寫東西就簡單了。首先要編寫的肯定是model類,model通過ORM對應到資料庫,這個類的編寫也可以算是在設計資料庫了。一對一,多對多,一對多等映射關係可能需要一些額外的資料庫基礎才能更好的理解。如果是初學,沒學過資料庫,那就先放棄這幾種外鍵關係。
model編寫完以後,我選擇的是把界面寫好,也就是template,但我前端太花時間,我不大願意寫,於是前端幾乎完全照抄Vmaig開源在github上的博客。template的編寫只需要注意到模板之間的集成就可以,其他沒有難點。這個階段要做的是,把頁面寫出來,不用管後台映射到模板的欄位。
url路由是相對簡單的一塊,寫模板的過程中,因為要看模板效果,就順帶把url.py寫了,定好了地址映射到的網頁。
最後一塊寫的是views部分,這部分是整個應用的邏輯部分,也是django比較複雜的一塊。不過文檔講的很清楚,所以我上手就直接用了通用視圖來寫。這一塊編寫完成,再返回template把映射欄位改好,基本就完工。
然後我嫌棄django後台實在太丑,我又查資料又問人,試了兩天,發現不能把django的admin模塊改成我想要的樣子,於是遂放棄。決定重寫後台,放棄admin模塊。寫到這的時候,我發現django不是很適合我,自由度不是很高,他功能很全,但有些地方要修改,不是那麼容易。
於是和寫前端一樣,除了登錄模塊,其餘後台模塊、頁面全都重寫。
網站首頁:後台頁面:後台頁面完全參考自metronic模板。編寫過程中,一旦不會(忘了),立刻回頭查閱文檔。由於之前看完了django的文檔,所以遇到問題的時候能快速定位到要查閱的地方。這就是先看完文檔的優勢,遇到問題的時候能清楚的知道django是否能解決這個問題?如果能,在哪有?
項目地址:zer0Black/zer0Blog: Blog by Django
題主可以參考參考。自己寫一個新的東西,絕對比照著別人的代碼抄一遍,理解的透徹。目前還沒有寫完,明天開始準備集成/修改django的許可權模塊。謝邀。
- 一般給你這個答案:當然要複習,這還用問。不過你提了專門的教程,結合你提問3,可見你Python基礎有一些,但不夠牢。所以恐怕有些問題你複習那個教程無法解決,請先去補充基礎知識。
- 進階學習就是仿站(動手做),比如你把知乎你能看到的頁面功能做一遍,哪裡下不去手了短板就在哪裡,然後去學就是。學編程跟練字一樣,要臨摹,臨時臨,摹是摹(自己搜索了解下區別咯),你現在還是摹的階段,進階就是要臨。
- 一般新手學習Python Web框架是先從Flask開始,Flask夠簡單,你連書都買了,難道沒發現比起Django,Flask容易學習很多麼?書沒看?先學Flask咯,覺得Flask小兒科了,再去用Django事半功倍。
- 你這是結果,你怎麼實現的?原生JS還是jQuery?這差別很大。不過你這點是想問什麼問題呢?沒看懂。
- 不客氣。
一、其實我覺得你缺乏一些關於伺服器、http和mvc的背景知識,遇到看不懂的概念應該馬上google之。或者看看相關的書。
這樣做的好處是,先把一些概念性的東西理清之後,再換任何一種框架會快很多。
二、進階就是把會用框架變成會寫框架。讀源碼是個不錯的選擇,可以學到設計模式、網路編程,以及如何解析模板,如何拿反射來實現orm,如何寫query parser等等這類奇技淫巧。dj太臃腫你可以看flask。記得看完定期寫筆記。是時候你自己寫一個基於wsgi標準web框架了,有助於你更透徹的了解flask和django,寫web框架絕對比你想像的簡單的多,難度大抵相當於組裝宜家的傢具
如果你是學生,建議從flask過渡到django,這樣你有足夠時間去折騰,而且flask的源碼是公認比較pythonic的,可以深入學習下。
我開始學習 Django 時候看了各種資料,現在想想唯一能記住也是幫助最大的就是官方文檔那個投票的例子,原理和概念講的清晰明了,也能保證學習的是新版,非常適合入門,一定要看英文原版,我當時開著翻譯軟體、Pycharm、百度谷歌,一邊寫代碼一邊看效果思考,沒有框架的概念沒有編程經驗只會點 Python 語法,很多地方想不明白,這消磨了我不少學習銳氣,多做多想幾遍,後來去網上查想了許久, MTV 的概念也越來越清晰,建議,第一不要怕英文麻煩,翻譯的不準會害了你更麻煩,第二界面美觀和顯示效果是前端的事,不在 Django 學習範圍,不要強求。
我在學,剛開始學的是Django,唄該死的URL給整死了,模板怎麼弄都提示非法參數,視圖函數也弄不好,氣個半死。現在轉頭Flask了,目前也遇到了一點問題,正在解決中...不知道哪位大神能給推薦兩本相關教材(中文的,我英文很爛),謝謝!
用django給公司做網站,看得是1.8.2的官方文檔,啃的動英文當然最好,去看最新1.9的書,伺服器用linux吧,window下搭建太蛋疼了,個人主頁有自己博客園的網址,記錄著一些相關知識,可以去看看!
打算從FLASK再到DJango
Python web推薦直接上flask,誰用誰知道。flask並不像樓上說的那樣只能用於小網站,因為flask絕大部分功能都有現成拔插件,根本不用自己開發。擴展後做大型網站毫無壓力。django太過於臃腫,被flask替代是大勢所趨。django目前最大的優勢就是開源項目多。所以新手入門,如果時間充裕,直接flask,時間緊的話先找些小型django開源項目一邊改一邊試。最後 ide推薦sublime和vs2013+ptvs,前者小巧,後者調試方便。個人認為比pycharm好用。
推薦閱讀: