我正在使用 Django 调试工具栏来调试和优化我的网站。我还使用一些自定义中间件来做一些事情,例如检查用户是否已登录并被允许访问他们试图查看的 url、查询广告等。
在这个中间件中,有时会执行 SQL 查询,但查询不会显示在 DDT 的“查询”面板下。有没有办法让 DDT 识别和跟踪中间件?
我正在使用 Django 调试工具栏来调试和优化我的网站。我还使用一些自定义中间件来做一些事情,例如检查用户是否已登录并被允许访问他们试图查看的 url、查询广告等。
在这个中间件中,有时会执行 SQL 查询,但查询不会显示在 DDT 的“查询”面板下。有没有办法让 DDT 识别和跟踪中间件?
根据文档:
MIDDLEWARE_CLASSES 的顺序很重要。您应该尽早在列表中包含调试工具栏中间件。但是,它必须位于对响应内容进行编码的任何其他中间件之后,例如 GZipMiddleware。
解决方案是将debug_toolbar.middleware.DebugToolbarMiddleware
自定义中间件放在MIDDLEWARE_CLASSES
.
我发现错误的地方之一是我为与启用 debug_toolbar 相关的所有设置添加了一个单独的文件 debugtoolbar.py。我刚刚在我的 settings_local.py 中导入了它,但它以某种方式调用了两次,并且没有显示查询。
一旦我添加了一个条件语句来添加
import os
import sys
from my_project.settings import INSTALLED_APPS, MIDDLEWARE_CLASSES
DEBUG_TOOLBAR_APPS_NAME = 'debug_toolbar'
if DEBUG_TOOLBAR_APPS_NAME not in INSTALLED_APPS:
INSTALLED_APPS += ( DEBUG_TOOLBAR_APPS_NAME, )
DEBUG_TOOLBAR_MIDDLEWARE = 'debug_toolbar.middleware.DebugToolbarMiddleware'
if DEBUG_TOOLBAR_MIDDLEWARE not in MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = ( DEBUG_TOOLBAR_MIDDLEWARE, ) + MIDDLEWARE_CLASSES
def custom_show_toolbar(request):
return True
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': 'my_project.settings.custom_show_toolbar',
}
它开始一切正常。希望这会节省某人的时间。