在Pycharm中可以给代码打断点,查看变量信息等。
Django 调试代码可以运行起来打日志,但无法中断代码调试。
Django 提供了一个 manage.py shell 命令可以创建 Django 环境,手工执行代码调试。
本文介绍如何把manage shell 和 Pycharm结合起来,在不启动 Django 的情况下调试代码模块。
原理:
python manage.py shell
可以用来创建一个交互式环境;
python manage.py shell -c "print('hello')"
可以直接在交互环境中执行语句;
import 模块时会加载运行其代码;
模块中可以用 if __name__ == "__main__":
判断是调试还是import运行;
因此只需把import语句放入shell -c 参数中,然后用环境变量判断是否在调试就可以了。
编辑配置
接下来可以创建或改造一个默认生成的配置:
关键点是:
- 脚本写项目的
manage.py
- 参数为
shell -c "from xxxx import yyy"
引入你要调试的模块 - 加一个环境变量
MANAGE_SHELL
用来区分是否在manage环境调试
然后编辑模块的 if __name__
部分:
# file tasks.py
def sync_ali_bills():...# 被调试的函数...import os
if __name__ == "__main__" or os.getenv('MANAGE_SHELL', False):sync_ali_bills()
因为有些模块可能和Django环境无关,因此我保留了__name__是否为__main__的判断,这种情况直接调试即可。
这样配置后进行调试,就可以正确加载Django环境,在代码中打断点,进行调试了。