一组可配置的面板,用于显示当前请求/响应的各种调试信息。版本完全兼容Django 1.3
项目描述
Django调试工具栏是一组可配置的面板,用于显示当前请求/响应的各种调试信息。点击时,会显示有关面板内容的更多详细信息。
目前,以下面板已被编写并工作
Django版本
请求计时器
settings.py中的设置列表
常见的HTTP头
GET/POST/cookie/session变量显示
使用的模板和上下文及其模板路径
SQL查询包括执行时间和每个查询的EXPLAIN链接
信号列表、它们的参数和接收者
通过Python的内置日志模块进行日志输出
目前还有一个Django管理命令
debugsqlshell:在Python交互式shell中工作时输出执行的SQL。(见下例)
如果您有其他面板的想法,请告诉我们。
安装
将debug_toolbar目录添加到Python路径中。
将以下中间件添加到项目的settings.py文件中
'debug_toolbar.middleware.DebugToolbarMiddleware',
将中间件与中间件相关联允许每个面板在请求时实例化,并在响应时渲染。
MIDDLEWARE_CLASSES的顺序很重要:调试工具栏中间件必须在任何其他编码响应内容的中间件之后(如GZipMiddleware)。
注意:调试工具栏仅在响应的mimetype为text/html或application/xhtml+xml并且包含一个关闭的</body>标签时显示。
注意:请注意中间件顺序和其他可能拦截请求并返回响应的中间件。例如,将调试工具栏中间件放在Flatpage中间件之后,意味着工具栏不会显示在flatpages上。
确保您的IP已列在INTERNAL_IPS设置中。如果您在本地工作,这将
INTERNAL_IPS = ('127.0.0.1',)
注意:这是由于内置的 show_toolbar 方法的要求。有关如何定义一个方法以确定显示工具栏的自定义逻辑,请参阅下文。
将debug_toolbar添加到您的INSTALLED_APPS设置中,以便Django可以找到与调试工具栏关联的模板文件。
或者,将调试工具栏模板的路径(《path/to/debug_toolbar/templates》)添加到您的 TEMPLATE_DIRS 设置中。
配置
调试工具栏有两个可以在 settings.py 中设置的设置
可选:在您的 settings.py 文件中添加一个名为 DEBUG_TOOLBAR_PANELS 的元组,指定您想要包含在工具栏中的面板的完整Python路径。此设置与 MIDDLEWARE_CLASSES 设置非常相似。例如
DEBUG_TOOLBAR_PANELS = ( 'debug_toolbar.panels.version.VersionDebugPanel', 'debug_toolbar.panels.timer.TimerDebugPanel', 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', 'debug_toolbar.panels.headers.HeaderDebugPanel', 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', 'debug_toolbar.panels.template.TemplateDebugPanel', 'debug_toolbar.panels.sql.SQLDebugPanel', 'debug_toolbar.panels.signals.SignalDebugPanel', 'debug_toolbar.panels.logger.LoggingPanel', )
您可以通过更改此元组的顺序来自定义要显示的面板的顺序,或添加/删除面板。如果您有自定义面板,您可以以这种方式包含它们——只需提供您的面板的完整Python路径即可。
可选:有几个配置选项可以放在字典中用于调试工具栏
INTERCEPT_REDIRECTS:如果设置为True(默认值),则在重定向时调试工具栏将显示一个中间页面,以便在重定向之前查看任何调试信息。此页面将提供一个链接,您可以在准备好时跟踪重定向目标。如果设置为False,重定向将像正常一样进行。
SHOW_TOOLBAR_CALLBACK:如果没有设置或设置为None,则debug_toolbar中间件将使用其内置的show_toolbar方法来确定是否应显示工具栏。默认检查是DEBUG必须设置为True,并且请求的IP必须在INTERNAL_IPS中。您可以提供自己的方法来显示工具栏,其中包含您的自定义逻辑。此方法应返回True或False。
EXTRA_SIGNALS:一个自定义信号数组,可能存在于您的项目中,定义为信号的Python路径。
HIDE_DJANGO_SQL:如果设置为True(默认值),则Django本身的代码不会显示在SQL堆栈跟踪中。
SHOW_TEMPLATE_CONTEXT:如果设置为True(默认值),则模板的上下文将包括在模板调试面板中。关闭此功能在您有大型模板上下文或具有您不想评估的懒惰数据结构的模板上下文时很有用。
:如果设置,这将是指调试工具栏附加调试工具栏的标签。默认为‘body’。
示例配置
def custom_show_toolbar(request): return True # Always show toolbar, for example purposes only. DEBUG_TOOLBAR_CONFIG = { 'INTERCEPT_REDIRECTS': False, 'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar, 'EXTRA_SIGNALS': ['myproject.signals.MySignal'], 'HIDE_DJANGO_SQL': False, 'TAG': 'div', }
debugsqlshell
以下是从运行 debugsqlshell 管理命令中得到的示例输出。每个导致数据库查询的ORM调用都将以美观的方式在shell中输出。
$ ./manage.py debugsqlshell Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from page.models import Page >>> ### Lookup and use resulting in an extra query... >>> p = Page.objects.get(pk=1) SELECT "page_page"."id", "page_page"."number", "page_page"."template_id", "page_page"."description" FROM "page_page" WHERE "page_page"."id" = 1 >>> print p.template.name SELECT "page_template"."id", "page_template"."name", "page_template"."description" FROM "page_template" WHERE "page_template"."id" = 1 Home >>> ### Using select_related to avoid 2nd database call... >>> p = Page.objects.select_related('template').get(pk=1) SELECT "page_page"."id", "page_page"."number", "page_page"."template_id", "page_page"."description", "page_template"."id", "page_template"."name", "page_template"."description" FROM "page_page" INNER JOIN "page_template" ON ("page_page"."template_id" = "page_template"."id") WHERE "page_page"."id" = 1 >>> print p.template.name Home