所以,我开始学习用Python和后来的Django编写代码.第一次很难看回溯并实际弄清楚我做错了什么以及语法错误在哪里.现在已经过了一段时间,并且在某种程度上,我想我在调试我的Django代码时有一个例程.由于这是在我的编码经验的早期完成的,我坐下来想知道我是如何做到这一点是无效的,可以更快地完成.我经常设法找到并纠正我的代码中的错误,但我想知道我是否应该更快地做到这一点?
我通常只使用Django启用时提供的调试信息.当事情最终按照我的想法结束时,我会在语法错误的情况下破坏代码流程,并查看流程中该点的变量以找出代码,其中代码执行的操作不是我想要的.
但这可以改善吗?是否有一些好的工具或更好的方法来调试Django代码?
出于调试目的,我想使用Django的日志记录机制来记录每个传入的请求,当它"到达"django-rest-framework的门口时.
Djagno以下列方式提供其请求的记录(仅"警告"日志级别及以上)(来自settings.py中的LOGGING部分):
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
Run Code Online (Sandbox Code Playgroud)
我想要实现这样的事情(注意:日志级别是DEBUG):
'rest_framework.request': {
'handlers': ['logfile'],
'level': 'DEBUG',
'propagate': False,
},
Run Code Online (Sandbox Code Playgroud)
有没有办法在不将记录器嵌入DRF的源代码的情况下做到这一点?
DRF中是否有某种"Logging Backend"选项我不知道?
我已将我的项目正确配置为manage.py使用正确的设置在正确的位置运行。
我还在一个我确信正在执行的方法中设置了调试断点(我在那里放置了一条打印语句,它按预期执行)。断点未禁用或有条件:
当我点击“在调试模式下运行”按钮时,使用上面的运行配置(我确信它是相同的,因为它是我为该项目配置的唯一一个),这是我得到的控制台输出:
pydev debugger: process 38083 is connecting
Connected to pydev debugger (build 192.5728.105)
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
December 23, 2020 - 19:22:22
Django version 3.1.4, using settings 'FEArena.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Run Code Online (Sandbox Code Playgroud)
当我尝试在 中放置断点时manage.py,它按预期工作,在我点击“调试”按钮时触发。但是,在应用程序启动后,当我使用 REST 客户端触发上述方法(其中有断点的方法)时,断点不会触发,调试器也不会启动。我200 OK在 REST 客户端中收到响应,但 PyCharm 不会在任何时候停止并执行调试器。
我查看了建议设置“Gevent 兼容调试”的其他答案(我没有,因为我使用的是社区版),并且我尝试删除.idea/项目的文件夹,但这也没有解决问题。我不确定还有什么可能导致这种情况。我只是想调试我的程序。
我的 PyCharm 版本信息是
PyCharm 2019.2 (Community Edition)
Build #PC-192.5728.105, …Run Code Online (Sandbox Code Playgroud)