沒有web開發經驗和相關背景。
有c語言基礎和python文法基礎。
在進行django學習之前,還有哪些基礎要求?
django的學習順序是什嗎?
時間較緊張,做一次自己一向鄙視的伸手黨。抱歉抱歉。。
回複內容:
貼一個很早之前挖的坑,可惜這坑一直沒填上。中間列了些知識點,是當時整理的架構,可以按照這個順序來逐步加深對Django的認識。
========================分割線========================
Learn Django from scratch
Python Web Development Guide
序
為什麼寫這篇教程
- 國內學習Django的新人越來越多,由於沒有好的教程,許多人學習不得要領,對Django產生了錯誤的理解
- 使用Django已經多年,想做些事情回饋社區
- 目前沒有看到特別好的中文教程,如果有,也就不需要再多寫一篇了
- 現有的文檔和教程不是為初學者設計的
- 如果照著那些一上來就教你怎麼做一個部落格的教程來學,就像是學習圍棋只知道定式,或者像看論文只看結論,而不看證明過程。初學者需要瞭解的是how it works而不是how to use it
適合哪些人
- 有一定編程基礎,希望學習Django掌握網站開發技能的新手
- 已經使用Django一段時間,希望更加深入的瞭解Django的原理以及實戰技巧的Django使用者
如何學習
- 本文主要是引導初學者一步一步的理解Django的設計思路,對於Django各個部分的介紹已經有很好的文檔了,將會大量引用
- 閱讀引用的文檔
- 閱讀引用的源碼
- 當你不明白為什麼的時候,讀原始碼
由於大部分內容是個人經驗的總結,如有錯誤和不準確的地方,還請各位高人指正
1. 網站開發基礎
雖然是一篇Django的教程,考慮到大部分學習Django的朋友對於網站開發並沒有深入理解,這裡先講一些基礎知識
許多朋友學習Django不得要領也是因為缺少基礎知識的支撐,
網站開發曆史
HTML & HTTP
HTTP Server
basehttpserver
靜態網頁
Simplehttpserver
apache
CGI
CGIHTTPServer
WSGI
wsgiref
2. 史上最爛Web架構
urldispatcher and function
3. 如果用Django來實現會是什麼樣子的
urls.py and views.py
4. 設定檔
settings
5. 按照app來組織代碼
MVT模型
6. 跟資料庫通訊
models.py
7. 表單處理
forms.py
8. 更好的產生頁面
templates templatetags
9. middleware
10. contrib apps
auth
admin
staticfiles
11. 用正確的方法來組織網站原始碼
python package
12. 第三方package
djangorestframework
south
13. 測試
14. 部署
nginx
gunicorn
postgres
fabric
15. advanced topics
long polling
websocket
tornado
mongrel2
========================分割線========================
補一句,其實最好的學習方式還是讀原始碼。讀Django的原始碼,讀好的第三方package的原始碼。然後模仿和借鑒。當看的多了,就能夠分辨好壞了。
這兩天在自學django,發現核心不在於文法,而在於稍微熟悉一下庫和理解網站的邏輯。以下前提是你有python基礎文法知識,要知道有裝飾器等東西(只需以後看到你能記起來這個東西好像哪裡出現過?然後能找回來,知道這個東西叫裝飾器就夠了,這隻是為了能夠google),而真正需要你去理解的,恐怕一點class的基礎就可以開始學django了。學習=學+練。邊學邊練才叫學習,只學不練到頭來寫不出來也很容易把學的東西忘記了,到時你要寫項目時就得重新學——這是吃力不討好,多急躁也勿把注意力放在一天學多少頁教程,XX天讀完它這種目標上。
(1)理解網站邏輯,MTV,就是指model處理商務邏輯,view是視圖函數,T指模板。用戶端首先登入一個網址(請參考《http權威指南》最前面10%不到的內容,書很厚但只需先看這部分,讀同時也是最基礎最易懂的那部分,希望不要因此感到壓力),然後進行DNS解釋(就是把網址解釋回ip地址),然後服務端接受到請求後從資料庫提取資料經過model,然後是views,然後是根據templates進行渲染,圖片/css/js等前端檔案儲存在static,然後將資訊發給使用者(看不懂這段話沒關係:先學html和css,還有http中最基礎那部分內容,再回頭看架構解釋就馬上能懂)。
(2)flask,django一起學。最好還把wamp(php的)一起學了。因為你會發現他們目錄都差不多,需要view,template等,邏輯是一致的。看起來需要花多一倍時間,實際是節省不少時間。因為代碼量其實很少,關鍵是在於理解——理解得快,花的時間就少,而對比學習稍微增加學習其他語言最基礎的部分的成本是值得的,因為能加快理解。必要時親自去寫代碼去測試你是否真的掌握(比如flask中有個藍圖的功能——是個痛點,但自己根據書中內容,通過4個檔案,14行代碼寫完後就馬上理解了。)
(3)配置好資料庫,啥資料庫都可以,django有orm去控制資料庫,不用寫資料庫本身的語句,所以剛學都沒區別。只需分得清SQL和NoSQL的區別就可以。
(4)配置完資料庫,如果你用mysql而且看舊的教程,恭喜,你已經順利地從google中學會去解決mysql不支援python3.4的問題(其實是支援,只是做法不一樣了,我還沒發現網上有最新版本的準確教程)。不懂的知識點能找則找,不能找就問,真的不能問就跳過。問問題的地方很多人建議stackoverflow,但英語一般可以去segmentfault問。英語在開始學習關係並不大。當你自己意識到英語重要時再學其實也不遲,而還沒意識到之前就“據說非常重要”同時對自己水平不高感到擔心是沒有必要的。
(5)看一個執行個體,就能理解需要最簡單的情況下三個步驟去往網站裡加內容,一是在資料庫model,二是建立URL映射即view,三是渲染的頁面放在template。到這裡用到的python知識最進階進階就是class而已。在flask可能有個裝飾器來建立url到視圖函數的映射關係,也會因為架構“輕”所以要import一大堆,這種diy建議還是熟了不再為web煩惱時,有心思去完善網站時再去接觸,一開始就學django。
(6)html,css需要學一下。這兩者值得花數天去熟悉一下,按一天2小時算,假如花上一周,就可以網上下載美工切好的模板,自己用html和css呈現出來。做完之後就用這幾個靜態頁面藉助django來搭後端,全部完成後就是你的第一個作品。javascript可以先擱著。
(7)把它完善後,比如動態url,還有前端的載入,相容等問題後,扔上github。這個過程中,你可能會發現win下開發有些難以理解的怪問題阻擋了你,那就下個vitualbox弄個ubuntu12.04,學學常用的命令,直接在linux下開發(入門linux需要成本,新手容易覺得學python還要學linux是添加額外的麻煩,但學習到了相當程式後,linux能夠避免很多win下才出現的問題,比如有些教程,中文或英文的,只有linux下面的版本——這樣其實也是為你節省時間)。同時在這個過程中,不要嫌麻煩多用github,github不僅是多人合作時有用,它會自動記錄曆史修改版本對於自己整理越來越龐大的程式也是很有作用的。學github基礎所花時間可能是幾個小時,然後網上搜一下“最佳實務”,並加以運用。
(8)查問題和配置花的時間要比代碼多得多,理解的時間也很多,寫代碼的時間是很少的。保證不熟的代碼自己打一遍,這樣的好處是學習編程這種邏輯化的東西,一環扣一環更容易理解。注重學習品質其實就是注重學習速度。正如一開頭而言,學習=學+練。
(9)教程最好中英結合。中文接受速度更快,而中文缺失的重要資料則通過英文補充。兩者配合效率更高。
(10)上面的內容很泛泛,尤其是它是基於架構之上的。但架構也是基於其他庫的,有人提出必須看源碼。這是對的,但切入點就很可能錯了。看原始碼是一件頗為耗費精力的事情,所以切入點應該在於去畫個網站原型出來,不斷參考各大網站,去建一個自己的blog。以blog為例,除了書中很多最簡單的快速入門,還有如驗證碼,站內搜尋用到的資料庫知識,Rest ful,網站註冊使用者的檔案編輯如何做得人性化所利用到的各種技術, 通過Javascript的ajax方式來與資料庫交換資料等方式進行等等。請注意原本還有jinja2等模板的支援,某特別好用的庫無法適用時,必須面臨的就是更加深入的基礎知識,HTTP,WSGI,爬蟲不再是一種入門的玩物,而是開始發現與web有著很大的交集的時候,那時候才算剛剛上了軌道學習,閱讀英語資料也是必不可少的。然而只要按照高要求去設計你的第一個web app,不要小林丸號,當你完成之後其實會進步很大,實踐和項如同“無形的手”一樣會以很好的時機引你進去編程的過去一直避而不談的地區。
P.S. 自學編程知識是一個方面,但心理上的負擔和沒有人指導的情況下,有的甚至是工作的壓力等都是影響進度和效率的關鍵因素,也非常合理——“急躁也是可以理解的”,所以去理解“保證品質其實就是保證速度”就顯得很重要了,而具體起來就是“linux可能不是一個大麻煩,剛開始學習編程接觸多門語言也不是一個負擔,而是一個加速器”。但歸納到底,技術需要日積月累,任何經驗和借鑒只能讓整個過程更加容易。希望以上經驗能夠有所協助。贊同樓上說的,我就不重複了,直接甩你一個伸手黨喜聞樂見地址:
Django官方Tutorrial中文版:新手入門 — Django 1.5 documentation
Django是MVC(Django內稱MTV)模式的Web架構。如果沒有Web經驗,學任何架構都不會很快,Django可能會是先對比較容易上手的。
建議瞭解一下MVC模式(網路上有很多教程應該),再看一些HTML / CSS / JS的基礎知識,w3shool的教程就OK。
學習Django的話,可以看官方文檔,官方文檔有一個類似introduction的東西,如果覺得理解起來困難,可以先搜中文版本的django book。
等到有了一個對Web Framework / Django 初步的認識瞭解,可以深入看一些Django的特性。
愚見,僅供參考。從09年開始用django至今,不過最近1年沒怎麼用django,因為工作原因主要在用tornado。
我學django是挑揀選揀的用,今天要用什麼就去看什麼,把官方那個文檔翻來覆去的看,每當我覺得看完了的時候,又會在文檔裡找到點新東西,很有意思。
django值得學習的地方(個人喜歡的地方)
- ORM (省事,方便,優雅。 雖然很多人對它的實現和效能有詬病,不過我覺得一個程式員不要還沒開始幹就扯效能,拋開業務需求談效能純粹屬於耍流氓,當然你要是產品上線到產品下線都不重構一次代碼都話,那我也沒什麼話好說的)
- 內建的User Auth(擴充性和安全性不需要我們一把屎一把尿的去搭建了,安全省心,你能想到的人家早已經想到了)
- Url mapping (省事)
- Forms(這玩意我用得少,因為第一個系統的表單複雜度不太適合用它,不過如果是做一些福士,通用性的東西,用它很省事)
不喜歡的地方:
- 模版 不說跟別的模版系統比,連tornado的模版都甩它幾條街,想實現個複雜都東西就得用tags,極其蛋疼。
- 相容性差,麻痹的曾經有一段時間我好不容易從1.4遷移到1.5,沒幾天1.6又出來了,我趕緊把自己到幾個應用遷移上去,還有一個沒遷移完1.7又尼瑪出來了,而且都沒辦法平滑都遷移 ,據說現在有1.8了,不過我暫時沒興趣用。
總結下來就是,如果想一上手就開始專註寫業務的話,用django是你的不二選擇,其他的架構輕量級是輕量了,但是難免重複造輪子,我們現在的項目用tornado,光寫適合的底層架構就又搞了接近2個月才能開開心心的寫業務。
至於怎麼學就不提了,去搞就好了,遇到問題就翻官方文檔。學完 python 想學 django,正好我最近組織了一個
django 新人學習小組,並開始一邊學習一邊做項目實踐。正好目前進行到第一周,小組正在做一個 Blog 程式,雖然簡單,但是足以帶你進入 django 開發的大門,歡迎 follow 我們,並期待您的建議和意見。
簡單介紹一下小組的運作模式:我們在每個周末會開一個小組討論會,討論下一周的開發內容,每個人根據其分配的任務去學習相應的文檔。但是不僅僅是做完自己的工作就完事了,每個人在學習的過程中還要把自己學的東西講給全小組的人聽(主要是寫成一份和自己工作相關的文檔),讓其他的組員都明白你做了什麼,這樣你不僅學到了自己該學的,也學到了其他組員學到的東西。
目前我們進行中第一周的項目,第一周的學習文檔已經出來了,發布在簡書上:Django學習小組出品:一起來做一個簡單的Blog第一周文檔(教程)。我把摘要部分貼出來,感興趣的朋友可以去簡書上閱讀原文。
此外歡迎關注我們的 github 組織首頁,所有項目的相關原始碼都會上傳到 github 上。每周更新,但是代碼量不大,確保在新人的接受範圍內,這樣可以讓新手完全跟上我們的學習和開發進度。
第一周文檔的摘要:這一周我們小組完成了 Blog 首頁的搭建。
本節是 django blog 項目的開篇,是 django 學習小組的集體學習成果。django學習小組是由我發起的一個促進 django 新手互相學習、互相協助的組織。小組在一邊學習 django 的同時將一起完成三個項目:
- 一個簡單django blog,用於發布小組每周的學習和開發文檔
- django中國社區,為國內的 django 開發人員們提供一個長期維護的 django 社區,聚集全國的 django 開發人員到這個社區上來
- django 問答社區, 類似於segmentfault 和 stackoverflow但更加專註(只專註於 django 開發的問題)的問答社區
目前小組正在完成第一個項目,本文即是該項目第一周的相關文檔。
更多的資訊請關注我們的 github 組織首頁,本教程項目的相關原始碼也已上傳到 github 上。
同時,你也可以加入我們的郵件清單 django_study@groups.163.com ,隨時關注我們的動態,我們會將每周的詳細開發文檔和代碼通過郵件清單發出。
如有任何建議,歡迎提 Issue,歡迎fork,pull request,當然也別忘了 Starred 哦!
每周更新,敬請關注
——by Django 學習小組,期待您的建議和意見http://djangobook.py3k.cn/2.0/
這個中文譯本不錯 。
這本書適用 1.0幾的版本 ,比較容易學 。現在的1.6.1 的版本 會複雜一點 。
基礎知識 呢,以我這小白的感覺認為 要:
- 會點命令列
- 基本HTML 文法(多然越多越好,雖然我現在還是只知道標籤要用兩個角括弧而已~)
- 資料庫的知識 ,比如建立資料庫,表 。(create ,select 之類。)
- 適量Python ,因為文法很像 。
- 瞭解一下CGI ,雖然實際用途不大,但是 可以協助我們理解 映射的關係 :
個人理解就是:CGI的就是老闆(HTML)叫員工(py)去做事 。現在Django呢, 就高端一些 。老闆有了秘書(url.py) ,通過urls.py ,來讓員工(views.py)去做事。
6 ,
Regex嘛,至少要知道 一點吧 。(程度只要能把一些網址用Regex寫出來,這樣呢,交代給秘書(urls.py) 。
ps: 因為我只看到第八章 ,所以就知道這麼些 需要 ,學習的話循序漸進 ,不懂的就去google ,stackoverflow
共勉!趁早換。。。文檔已經很清晰簡單了,學就是了。
基礎肯定是共通的,如果簡單來說,就是html/css/js還有資料庫的sql等,還有最關鍵的Python本身要有一定的瞭解。感覺編碼是個大問題,其他倒是很方便的