• Django(73)django-debug-toolbar调试工具


    介绍

    Django框架的调试工具栏使用django-debug-toolbar库,是一组可配置的面板,显示有关当前请求/响应的各种调试信息,点击时,显示有关面板内容的更多详细信息。
     

    应用

    1. 安装

    pip install django-debug-toolbar
    

    2. settings配置

    先决条件:必须确认django.contrib.staticfiles 正确安装并且启用

    INSTALLED_APPS = [
        # ...
        'django.contrib.staticfiles',
        # ...
        'debug_toolbar',
    ]
    
    STATIC_URL = '/static/'
    

    3. urls.py路由配置

    在主应用下的根urls.py中的最下面添加如下代码:

    if "debug_toolbar" in settings.INSTALLED_APPS:
        import debug_toolbar
        urlpatterns = [
            path('__debug__/', include(debug_toolbar.urls)),
        ] + urlpatterns
    

    说明

    • 这里使用 '\__debug__' 作为路径访问,可以设置任意的路径名,只要能轻易区分一般应用
    • 如果放在子应用的urls.py下的话,会抛出NoReverseMatch 'djdt' is not a registered namespace异常
       

    4. 启动中间件

    调试工具栏主要在中间件中实现:

    MIDDLEWARE = [
        # ...
        'debug_toolbar.middleware.DebugToolbarMiddleware',
        # ...
    ]
    

    注意:这个中间件尽可能配置到最前面,但是,必须要要放在处理编码和响应内容的中间件后面,比如我们要是使用了GZipMiddleware,就要把DebugToolbarMiddleware放在GZipMiddleware后面
     

    5. 设置内部IP

    调试工具栏只会允许特定的ip访问,在settingsINTERNAL_IPS中配置

    INTERNAL_IPS = [
        # ...
        '127.0.0.1',
        # ...
    ]
    

    6. 访问

    访问应用的任意页面,在页面的右上角会有一个 DJDT的悬浮窗

    点击后就会出现调试工具栏

     

    7. 面板功能

    调试工具栏上有多个功能,下面介绍作用

    • Versions :代表是哪个django版本
    • Timer : 用来计时的,判断加载当前页面总共花的时间
    • Settings : 读取django中的配置信息
    • Headers : 当前请求头和响应头信息
    • Request: 当前请求的相关信息(视图函数,Cookie信息,Session信息等)
    • SQL:查看当前界面执行的SQL语句
    • StaticFiles:当前界面加载的静态文件
    • Templates:当前界面用的模板
    • Cache:缓存信息
    • Signals:信号
    • Logging:当前界面日志信息
    • Redirects:当前界面的重定向信息
       

    8. 面板配置

    django-debug-toolbar默认使用全面板,默认的全局配置在 debug_toolbar.settings.CONFIG_DEFAULTS

    PANELS_DEFAULTS = [
        "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",
    ]
    

    如果不使用默认的全功能面板,那么在settings中配置 DEBUG_TOOLBAR_PANELS 即可,示例如下:

    DEBUG_TOOLBAR_PANELS = [
        "debug_toolbar.panels.timer.TimerPanel",
        "debug_toolbar.panels.headers.HeadersPanel",
        "debug_toolbar.panels.request.RequestPanel",
        "debug_toolbar.panels.templates.TemplatesPanel",
    ]
    

    9. 工具栏配置

    settings中配置 DEBUG_TOOLBAR_CONFIG 覆盖默认配置,分为2部分,一部分适用于工具栏本身,另一部分适用于某些特定面板

    DEBUG_TOOLBAR_CONFIG = {
        # Toolbar options
        "DISABLE_PANELS": {"debug_toolbar.panels.redirects.RedirectsPanel"},
        "INSERT_BEFORE": "</body>",
        "RENDER_PANELS": None,
        "RESULTS_CACHE_SIZE": 10,
        "ROOT_TAG_EXTRA_ATTRS": "",
        "SHOW_COLLAPSED": False,
        "SHOW_TOOLBAR_CALLBACK": "debug_toolbar.middleware.show_toolbar",
        # Panel options
        "EXTRA_SIGNALS": [],
        "ENABLE_STACKTRACES": True,
        "HIDE_IN_STACKTRACES": (
            "socketserver" if six.PY3 else "SocketServer",
            "threading",
            "wsgiref",
            "debug_toolbar",
            "django.db",
            "django.core.handlers",
            "django.core.servers",
            "django.utils.decorators",
            "django.utils.deprecation",
            "django.utils.functional",
        ),
        "PROFILER_MAX_DEPTH": 10,
        "SHOW_TEMPLATE_CONTEXT": True,
        "SKIP_TEMPLATE_PREFIXES": ("django/forms/widgets/", "admin/widgets/"),
        "SQL_WARNING_THRESHOLD": 500,  # milliseconds
    }
    

    工具栏选项

    • DISABLE_PANELS
      默认: {'debug_toolbar.panels.redirects.RedirectsPanel'}
      此设置是要禁用(但仍显示)的面板的完整Python路径的集合

    • INSERT_BEFORE
      默认: '</body>'
      工具栏在HTML中搜索此字符串并在之前插入。

    • RENDER_PANELS
      默认: None
      如果设置为False,调试工具栏将把面板的内容保留在服务器上的内存中并按需加载它们。如果设置为True,则会在每个页面内呈现面板。这可能会降低页面呈现速度,但在多进程服务器上需要这样做,例如,如果在生产中部署工具栏(不建议这样做)。
      默认值None告诉工具栏自动执行正确的操作,具体取决于WSGI容器是否运行多个进程。此设置允许您在需要时强制执行不同的操作。

    • RESULTS_CACHE_SIZE
      默认: 10
      工具栏在内存中保持的结果缓存数量。

    • ROOT_TAG_EXTRA_ATTRS
      默认: ''
      此设置将注入根模板div中,以避免与客户端框架发生冲突。例如,将调试工具栏与Angular.js一起使用时,将其设置为'ng-non-bindable''class="ng-non-bindable"'

    • SHOW_COLLAPSED
      默认: False
      如果更改为True,则默认情况下将折叠工具栏。

    • SHOW_TOOLBAR_CALLBACK
      默认: 'debug_toolbar.middleware.show_toolbar'
      这是用于确定工具栏是否应显示的函数路径,默认检测DEBUG设置为True,并且访问IP必须在INTERNAL_IPS中,代码如下:

    def show_toolbar(request):
        """
        Default function to determine whether to show the toolbar on a given page.
        """
        if request.META.get("REMOTE_ADDR", None) not in settings.INTERNAL_IPS:
            return False
    
        return bool(settings.DEBUG)
    

    可以设置自定义的检测函数路径
     

    面板选项

    • EXTRA_SIGNALS
      默认: []
      面板:信号
      可能在项目中的自定义信号列表,定义为信号的Python路径。

    • ENABLE_STACKTRACES
      默认: True
      面板:缓存,SQL
      如果设置为True,则将显示SQL查询和缓存调用的堆栈跟踪。启用堆栈跟踪会增加执行查询时使用的CPU时间。

    • HIDE_IN_STACKTRACES
      默认值:('socketserver', 'threading', 'wsgiref', 'debug_toolbar', 'django')`
      面板:缓存,SQL
      用于消除与服务器相关的堆栈跟踪,这可能导致巨大的DOM结构和工具栏渲染延迟。

    • PROFILER_MAX_DEPTH
      默认: 10
      面板:剖析
      此设置会影响分析器分析中的函数调用深度。

    • SHOW_TEMPLATE_CONTEXT
      默认: True
      面板:模板
      如果设置为True则模板的上下文将包含在模板调试面板中。如果项目中拥有大型模板上下文,或者具有不希望被评估的惰性数据结构的模板上下文,则关闭此选项非常有用。

    • SKIP_TEMPLATE_PREFIXES
      默认: ('django/forms/widgets/', 'admin/widgets/')
      面板:模板
      收集渲染的模板和上下文时,将跳过以这些字符串开头的模板。默认情况下会跳过基于模板的表单小部件,因为面板的HTML可以轻松地增长到数百兆字节,包含许多表单字段和许多选项。

    • SQL_WARNING_THRESHOLD
      默认: 500
      面板:SQL
      SQL面板突出显示执行时间超过这段时间(以毫秒为单位)的查询

  • 相关阅读:
    CF538H Summer Dichotomy
    CF1558F Strange Sort
    CF429E Points and Segments
    CF986F Oppa Funcan Style Remastered
    [JOI Open 2016] 摩天大楼
    [做题笔记] 浅谈笛卡尔树结构的应用
    CF1383C String Transformation 2
    CF1558E Down Below
    weex打包安卓艰苦之路
    IntelliJ IDEA 推荐15款插件
  • 原文地址:https://www.cnblogs.com/jiakecong/p/15485274.html
Copyright © 2020-2023  润新知