閱讀django源代碼?
使用django也有一段時間了,但是只會使用,而不知其所以然,看到很多大神從來都是閱讀源代碼來了解一個系統的,所以我也想試一試,我的Python基礎已經有了,然而我發現當我想閱讀的時候卻不知從何讀起,是從程序入口入去讀呢,還是不管這些直接看裡面的代碼包,我的理解應該是先了解程序的運行機制,所以我從入口處通過debug單步運行開始讀起,但是感覺效率好低,跳來跳去,程序的嵌套把我自己都搞暈了,我現在就是感覺暈乎乎的,所以請各位大神們幫助,非常感謝,本人只學習Python不到兩個月,從事編程工作剛滿一年,學了一大堆程序語言,正是想提高自己的時候,希望各位能夠不吝賜教。
django用了兩年半了,從1.4用起。至今已經熟讀了django的絕大部分子系統(orm,forms,模板,cbv,admin等等),一路讀了1.5,1.6,1.7到現在github中django項目的每個提交都會大致掃一下。一開始看源碼只是因為用的時候報錯調用棧是從django的代碼中拋出,就順藤摸瓜看看它對應這個功能怎麼實現的,到後面熟悉到有功能不知怎麼用時,有如翻文檔不如直接看源碼來的快且準確。
django的源代碼其實很易讀,首先它功能拆分非常細緻合理,比如orm部分就在django.db.models中,admin就在django.contrib.admin中。其次django的設計思想是非常OO的,大量使用繼承,元類等,比如所有的簡單models fields都繼承自models.fields.Field ,在此基礎上又繼承出RelationField(對應ForeignKey和OneToOneField)以及MultiRelationField(對應ManyToManyField),只要找到一個類,順藤摸瓜往上看,整個子系統的結構就非常清楚了。
看django源碼中學到了很多,比如命名規範,代碼拆分,類的抽象,成長不少。現在看源碼更多是為了針對特定需求擴展,比如剛寫了對postgres 9.4中jsonb欄位的查詢支持,使用了1.7中新增的Transform API.看代碼,如果有條件就帶行號帶高亮列印出來。Django代碼質量不低,變數名啊注釋啊都很到位,直接看很方便
個人覺得這就和做數學題一樣,我們使用各種定理去解答問題,但並非要明白每個所使用定理的證明過程(內部原理),只有當我們覺得某個定理是瓶頸或者認為有可能錯誤時,再去確認其細節。
我想使用django也一樣,我會使用django寫一個項目(blog?),當我發現ORM是瓶頸時,我會去看相關的代碼;當我想擴充template filter/tag功能時,我會去查看相關代碼,等等。直接在網上找相關的文章看看,這樣可以理理頭緒。
與其在這裡問,不如開始讀。從入口文件開始。
Django is Python
推薦閱讀:
※HashMap的doubleCapacity()方法這樣寫妙在哪?
※你對APM飛控的源碼做過哪些有意思的改動?
※修改基於GPL協議的軟體,不公開源代碼,如何規避那個狗比協議?
※有必要深入研究 PHP 源碼嗎?有哪些好的方法?
※修改基於GPL協議的軟體,不公開源代碼,如何規避那個協議??