今天的內容我只能說我自己也沒有把握說真的理解了,就算了解了程式在寫什麼,也還沒達到可以理解為什麼這樣寫!話不多說,趕緊走著!
今天先從上次沒能理解的地方開始
這個是django有一個寫法叫做signal,顧名思義是一個傳送信號的function,而信號能做什麼事呢,接著看
看到這邊django會根據django settings中INSTALLED_APPS的AppConfig來去分送分別的信號給該app所擁有的信號接收者,接收者在哪,我們接著看
這裡面就會把信號signal送給接收者receiver囉!
而receiver當中又有使用到python函式庫weakref,weakref也是滿有趣的可以解決掉一些python麻煩的問題,像是circular等等問題相關文章google可以找很多,參考文章
那這個receiver又是什麼時候被設置的呢?而他又會觸發什麼樣的function呢?
其實早在MigrationExecutor
init中的MigrationRecorder
那邊就被設置了
被django當中的apps
而這個會去跑所有AppConfig的ready function
那我們再來看ready中有什麼存在吧
經過我一番搜索,在ContentTypesConfig
中找到了ready跟pre_migrate
有關的地方
connect在ready的時候設置,而在send的時候被觸發,大概是這種感覺吧!
這邊是看migrate相關的signal,django還有設置其他的signal,當然也可以自定義詳細可以自行google或看這邊大江狗
大概了解了signal的運作後,我們繼續往下走吧!(每個app都有自己的pre post migrate有興趣的也可以嘗試自己讀讀看找找看,這邊就不詳細的一個一個介紹了,還是之後篇幅不夠再拿來介紹XD)
再來終於到了migrate至db的地方
今天就當我補坑,明天再接續著看看migrate吧~(稍微看了一下篇幅好像挺長的XD
今天的圖大概長這樣
本日關鍵字
migrate這個指令真的跟太多相關的物件有關聯了,追原始碼的過程中很容易不小心就迷路了,或者是突然忘記那個變數是什麼東東,通常都直接print出來看看就好了,但有時候print出來的和自己想的不一樣就要回去重找XD這也算是python的特性之一吧!