官术网_书友最值得收藏!

2.1.4 call_command()函數

從函數名即可看出該函數是用于執行命令的,即Django支持的那些命令,如check、shell、startproject、migrate等。該函數可接受一個或者多個參數,第1個參數為命令名稱(command_name)或者一個Command對象。如果是后者,則可根據Command對象反推得到命令名稱。該函數最后調用的是對應命令的Command對象中的execute()方法,這個方法的核心邏輯將在后續分析命令源碼時介紹,它是所有Django命令行的入口:

在Django源碼中,Command類的祖先類為BaseCommand類,該類定義在源碼的django/core/management/base.py文件中。下面是該類的核心實現,這里省略了部分方法和注釋說明:

在后面分析命令時會看到,所有的命令調用的都是Command對象中的run_from_argv()方法。run_from_argv()方法對命令行中的相關參數進行處理后會直接調用self.execute()方法執行命令。在execute()方法中,會根據類屬性值及相關選項決定是否進行系統檢查、遷移檢查,以及是否輸出執行的SQL語句。在self.execute()方法中,最核心的為self.handle()方法。handle()方法并未提供實現代碼,而是要求后續繼承該類的子類自行實現相應的處理邏輯。

主站蜘蛛池模板: 新乡县| 和田县| 尼勒克县| 宜君县| 乌拉特中旗| 建平县| 千阳县| 台湾省| 西丰县| 武山县| 句容市| 鸡西市| 大洼县| 沙河市| 襄汾县| 区。| 嘉善县| 遵义市| 潮安县| 梁平县| 中宁县| 龙州县| 徐州市| 西贡区| 阳东县| 商都县| 喀什市| 郴州市| 博乐市| 安乡县| 正定县| 翁源县| 镇江市| 石棉县| 沁源县| 内江市| 苏尼特左旗| 扶沟县| 元朗区| 巴里| 潼南县|