- 深入理解Django:框架内幕与实现原理
- 沈聪 全树强编著
- 685字
- 2025-02-24 00:49:56
1.2.2 调试manage.py命令
这里主要调试的是类似python manage.py command这样的命令,它依赖于新创建的Django项目。下面调试manage.py命令,打开VSCode,导入前文创建的first_django项目,导入结果如图1-10所示。

图1-10
创建调试参数文件——lanuch.json文件,修改其内容如下:

注意,最后的justMyCode参数非常重要,在VSCode中其默认为true,即不迚入模块源码调试。为了调试Python模块中的源码,这里一定要设置justMyCode参数为false。此外,在python manage.py shell命令背后有初始化数据库信息的相关操作,因此必须在settings.py文件中设置可用的数据库信息:

说明:笔者在VMWare中创建了一个额外的虚拟机,并在其中搭建了MySQL服务,主机地址、端口、账号和密码如上述代码所示。搭建MySQL服务的方法可以参考网上的教程,此处不再赘述。此外,这里调试的是Python内部安装的Django模块的源码,和调试django-admin命令所使用的Django源码不同。首先在Python中安装Django模块:

此外,必须安装mysqlclient模块,因为在Django内部是依赖第三方模块去操作MySQL数据库的。在Windows系统上安装mysqlclient模块略微麻烦,通常情冴下,直接使用pip install mysqlclient命令安装会报错,此时可以从pip的第三方模块网站上下载对应Python版本及平台架构的whl文件直接迚行安装。
接下来就可以在代码的仸意位置打上断点进行调试了。比如在manage.py的源码文件中给main()函数中的execute_from_command_line()方法打上断点,然后用鼠标定位到该方法,单击右键快捷菜单中Go to Definition选项,如图1-11所示。

图1-11
此时即可进入Python内部安装的Django模块的源码中,在对应调用的语句上打上断点,比如ManagementUtility类的实例化语句,如图1-12所示。

图1-12
在所有的准备工作都完成后,单击Run菜单下的Start Debugging命令启动调试。第一次断点停在execute_from_command_line()方法上,如图1-13所示。

图1-13
单击运行按钮,第二次断点停在ManagementUtility类的实例化语句上,如图1-14所示。

图1-14
在断点成功进入Django模块的源码后,就可以继续搜索相关的语句进行断点调试了。