Django学习之django_debug_toolbar使用
django_debug_toolbar 是django的第三方工具包,给django扩展了调试功能。包括查看执行的sql语句,db查询次数,request,headers,调试概览等。
安装
使用pip3 install django_debug_toolbar安装 然后修改settings.py和urls.py文件。
修改settings文件
1、添加调试工具App debug_toolbar
INSTALLED_APPS = [
‘django.contrib.admin‘,
‘django.contrib.auth‘,
‘django.contrib.contenttypes‘,
‘django.contrib.sessions‘,
‘django.contrib.messages‘,
‘django.contrib.staticfiles‘,
‘app01‘,
‘debug_toolbar‘,
]2、添加调试工具中间件
MIDDLEWARE = [
.......
‘debug_toolbar.middleware.DebugToolbarMiddleware‘,
]3、添加调试工具的IP
INTERNAL_IPS = [‘127.0.0.1‘,]
4、debug_toolbar 组件选项
默认值为如下12个组件,可根据需要自行调整。此处不写代表使用默认值。
DEBUG_TOOLBAR_PANELS = [
‘debug_toolbar.panels.versions.VersionsPanel‘,
‘debug_toolbar.panels.timer.TimerPanel‘,
‘debug_toolbar.panels.settings.SettingsPanel‘,
‘debug_toolbar.panels.headers.HeadersPanel‘,
‘debug_toolbar.panels.request.RequestPanel‘,
‘debug_toolbar.panels.sql.SQLPanel‘,
‘debug_toolbar.panels.staticfiles.StaticFilesPanel‘,
‘debug_toolbar.panels.templates.TemplatesPanel‘,
‘debug_toolbar.panels.cache.CachePanel‘,
‘debug_toolbar.panels.signals.SignalsPanel‘,
‘debug_toolbar.panels.logging.LoggingPanel‘,
‘debug_toolbar.panels.redirects.RedirectsPanel‘,
]修改urls文件
from django.conf import settings
if settings.DEBUG:
import debug_toolbar
urlpatterns += [
url(r‘^__debug__/‘, include(debug_toolbar.urls)),
]访问url即可看到页面
分别点击Settings、Headers、SQL等可以看到相关的详细信息


通过查看sql可以看到一共执行了多少次sql查询
例子:
from django.shortcuts import render,HttpResponse
from app01 import models
def index(request):
#v = models.User.objects.all() #去除diango自带查询,view中代码和html中代码一共执行1次查询
v = models.User.objects.all().select_related(‘user_type‘) #去除diango自带查询,view中代码和html中代码一共执行1次查询
#v = models.User.objects.all().prefetch_related(‘user_type‘) #去除diango自带查询,view中代码和html中代码一共执行2次查询
return render(request,‘index.html‘,{‘v‘: v})<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for item in v %}
<p>{{ item.name }}
{{ item.email }}
{{ item.user_type.name }}</p>
{% endfor %}
</body>
</html>select_related()当执行它的查询时它沿着外键关系查询关联的对象数据。它会生成一个复杂的查询并引起性能的消耗,但是在以后使用外键关系时将不需要数据库查询。 prefetch_related()返回的也是QuerySet,它将在单个批处理中自动检索每个指定查找的对象。这具有与select_related类似的目的,两者都被设计为阻止由访问相关对象而导致的数据库查询的泛滥,但是策略是完全不同的。 select_related通过创建SQL连接并在SELECT语句中包括相关对象的字段来工作。因此,select_related在同一数据库查询中获取相关对象。然而,为了避免由于跨越“多个‘关系而导致的大得多的结果集,select_related限于单值关系 -外键和一对一关系。 prefetch_related,另一方面,为每个关系单独查找,并在Python中“加入”。这允许它预取多对多和多对一对象,除了外键和一对一关系,它们不能使用select_related来完成。
QuerySet 查询优化