码迷,mamicode.com
首页 > 其他好文 > 详细

Django学习之django_debug_toolbar使用

时间:2019-12-14 12:13:15      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:class   time   header   led   deb   name   一对一   event   ade   

    

    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使用

标签:class   time   header   led   deb   name   一对一   event   ade   

原文地址:https://www.cnblogs.com/quanloveshui/p/12038373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!