So, I started learning to code in Python and later Django. The first times it was hard looking at tracebacks and actually figure out what I did wrong and where the syntax error was. Some time has passed now and some way along the way, I guess I got a routine in debugging my Django code. As this was done early in my coding experience, I sat down and wondered if how I was doing this was ineffective and could be done faster. I usually manage to find and correct the bugs in my code, but I wonder if I should be doing it faster?

我通常只使用Django启用时提供的调试信息。当事情确实像我想象的那样结束时,我用一个语法错误破坏了代码流,并查看流中那个点的变量,以找出代码在哪里做了与我想要的不同的事情。

但这种情况还能改善吗?是否有一些更好的工具或方法来调试Django代码?


当前回答

对于那些不小心将pdb添加到实时提交的人,我可以建议这个扩展#Koobz的答案:

@register.filter 
def pdb(element):
    from django.conf import settings
    if settings.DEBUG:    
        import pdb
        pdb.set_trace()
    return element

其他回答

有很多方法可以做到这一点,但最直接的是简单 使用Python调试器。只需在Django视图函数中添加如下一行:

import pdb; pdb.set_trace()

or

breakpoint()  #from Python3.7

如果您试图在浏览器中加载该页,浏览器将挂起,并提示您对实际执行的代码进行调试。

但是也有其他的选择(我不推荐):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

但是对于所有类型的Python代码,强烈推荐使用Python调试器(pdb)。如果您已经开始使用pdb,那么您还需要了解使用ipython进行调试的IPDB。

对pdb有一些更有用的扩展

pdb++,由Antash建议。

pudb,由PatDuJour建议。

在Django中使用Python调试器,由Seafangs建议。

如果在django开发中使用Aptana,请注意:http://www.youtube.com/watch?v=qQh-UQFltJQ

如果没有,考虑使用它。

有时,当我想在一个特定的方法中探索,而召唤pdb太麻烦时,我会补充:

import IPython; IPython.embed()

IPython.embed()会启动一个IPython shell,它可以从你调用它的地方访问局部变量。

我非常喜欢Werkzeug的交互式调试器。它类似于Django的调试页面,除了在回溯的每一层都有一个交互式shell。如果你使用django-extensions,你会得到一个runserver_plus管理命令,它会启动开发服务器,并在异常时为你提供Werkzeug的调试器。

当然,您应该只在本地运行它,因为它赋予任何使用浏览器的人在服务器上下文中执行任意python代码的权利。

有一些工具配合得很好,可以使您的调试任务更容易。

最重要的是Django调试工具栏。

然后需要使用Python日志工具进行良好的日志记录。您可以将日志输出发送到日志文件,但更简单的选择是将日志输出发送到firepython。要使用此功能,您需要使用带有firebug扩展的Firefox浏览器。Firepython包含一个firebug插件,可以在firebug选项卡中显示任何服务器端日志记录。

Firebug本身对于调试您所开发的任何应用程序的Javascript方面也很重要。(当然前提是你有一些JS代码)。

我也喜欢django-viewtools,它可以用pdb交互地调试视图,但是我不怎么用它。

还有更有用的工具,如dozer,可以跟踪内存泄漏(在SO的回答中也有其他关于内存跟踪的好建议)。