Django学习之django_debug_toolbar使用

Posted quanloveshui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 查询优化

 

以上是关于Django学习之django_debug_toolbar使用的主要内容,如果未能解决你的问题,请参考以下文章

django 学习之DRF

django 学习之DRF

Django学习之文件上传

Django学习之文件上传

django学习之创建Django项目

Django学习之创建Django应用