使用 Python 调试器(Pdb)
最基本的 Django 调试工具是 pdb ,它是 Python 标准库的一部分。
初始化视图脚本
我们来看一个简单的 views.py
脚本:
from django.http import HttpResponse
def index(request):
foo = 1
bar = 0
bug = foo/bar
return HttpResponse("%d goes here." % bug)
用于运行服务器的 Console 命令:
python manage.py runserver
很明显,当你尝试加载索引页面时,Django 会抛出一个 ZeroDivisionError
,但是如果我们假装代码中的 bug 很深,那么它可能会变得非常讨厌。
设置断点
幸运的是,我们可以设置断点来追踪该错误:
from django.http import HttpResponse
# Pdb import
import pdb
def index(request):
foo = 1
bar = 0
# This is our new breakpoint
pdb.set_trace()
bug = foo/bar
return HttpResponse("%d goes here." % bug)
使用 pdb 运行服务器的控制台命令:
python -m pdb manage.py runserver
现在页面加载断点将在 shell 中触发(Pdb)提示,这也会使浏览器挂起处于挂起状态。
使用 pdb shell 进行调试
是时候通过 shell 与脚本交互调试该视图了:
> ../views.py(12)index()
-> bug = foo/bar
# input 'foo/bar' expression to see division results:
(Pdb) foo/bar
*** ZeroDivisionError: division by zero
# input variables names to check their values:
(Pdb) foo
1
(Pdb) bar
0
# 'bar' is a source of the problem, so if we set it's value > 0...
(Pdb) bar = 1
(Pdb) foo/bar
1.0
# exception gone, ask pdb to continue execution by typing 'c':
(Pdb) c
[03/Aug/2016 10:50:45] "GET / HTTP/1.1" 200 111
在最后一行中,我们看到我们的视图返回了一个 OK
响应并按预期执行。
要停止 pdb 循环,只需在 shell 中输入 q
即可。