Описание

Django Debug Toolbar (DDT) - это инструмент, который предназначен для упрощения процесса отладки при разработке веб-приложений на основе фреймворка Django. Этот инструмент добавляет визуальную панель отладки, которая позволяет разработчикам получать полезную информацию о запросах, базе данных, производительности и других аспектах приложения прямо в браузере.

Некоторые ключевые возможности:

  1. Информация о запросах: DDT показывает список всех SQL-запросов, выполняемых во время запроса страницы, а также время, затраченное на каждый запрос.
  2. Профилирование производительности: Позволяет анализировать производительность каждого запроса, включая время выполнения представления и время, затраченное на выполнение различных частей запроса.
  3. Информация о шаблонах: Для каждой загружаемой страницы показывается список всех шаблонов Django, которые были использованы для её формирования, и время, затраченное на обработку каждого шаблона.
  4. Панель отладки запросов: Отображает информацию о текущем запросе, параметры запроса, заголовки и другие детали.
  5. Информация о сессиях и пользователях: Позволяет просматривать текущие сессии и информацию о пользователях, включая их атрибуты и данные.
  6. Отладка кэша: Показывает информацию о кэшировании, включая количество кэш-промахов и время, затраченное на кэширование.
  7. Пользовательские панели: Разработчики могут создавать собственные панели для отображения дополнительной отладочной информации.

Установка

  1. Устанавливаем пакет в наше виртуальное окружение через терминал, используя команду:

    pip install django-debug-toolbar
  2. Проверяем наличие необходимых настроек в нашем settings.py.

    INSTALLED_APPS = [
        # ...
        "django.contrib.staticfiles",
        # ...
    ]
     
    STATIC_URL = "static/"
     
    TEMPLATES = [
        {
            "BACKEND": "django.template.backends.django.DjangoTemplates",
            "APP_DIRS": True,
            # ...
        }
    ]
  3. В том же файле, добавляем необходимые конфигурации для toolbar-а.

    INSTALLED_APPS = [
        # ...
        'debug_toolbar',
        # ...
    ]
     
    MIDDLEWARE = [
        # ...
        'debug_toolbar.middleware.DebugToolbarMiddleware',
        # ...
    ]
     
    INTERNAL_IPS = ['127.0.0.1',]

    MIDDLEWARE, но после любого middleware, которое изменяет (сжимает/кодирует) содержимое ответа. На данный момент не понятно почему, но так сказано в документации)

    В общем случае, Debug Toolbar middleware следует помещать как можно раньше в списке 

  4. Добавляем маршрут до toolbar в маршруты проекта.

    urlpatterns = [
        # ...
        path('__debug__/', include('debug_toolbar.urls')),
    ]

Описание панелей

  1. History

    • Позволяет просмотреть историю предыдущих запросов к вашему приложению Django.
    • Возможность вернуться к определенному моменту отладки для анализа данных запроса/ответа.
  2. Version

    • Показывает версии Python, Django и установленных приложений, если это возможно.
    • Панель Versions позволяет быстро убедиться в том, что вы работаете с ожидаемыми версиями, и обеспечивает прозрачность в отношении используемых версий библиотек.
  3. Time

    • Измеряет общее время выполнения запроса.

    • Ценно для оценки производительности и выявления узких мест.

      1. User CPU time (Время CPU пользователя): Это время, которое процессор провел, выполняя код в пользовательском пространстве, то есть код вашего приложения.

        Быстрое выполнение - до 10 мс., среднее - 10-50 мс., медленное - более 50 мс.

        Если это значение очень высокое, это может указывать на то, что ваш код требует большого количества процессорного времени для выполнения. В этом случае вы можете попробовать оптимизировать свой код, уменьшив количество итераций или использование сложных алгоритмов.

      2. System CPU time (Время CPU системы): Это время, которое процессор провел, выполняя системные операции, такие как ввод-вывод или выполнение системных вызовов.

        Быстрое выполнение - до 10 мс., среднее - 10-50 мс., медленное - более 50 мс.

        Высокое значение этого параметра может указывать на то, что ваше приложение часто обращается к внешним ресурсам, таким как база данных или файловая система. В этом случае вы можете попробовать оптимизировать доступ к внешним ресурсам или улучшить их производительность.

      3. Total CPU time (Общее время CPU): Это сумма времени CPU пользователя и времени CPU системы.

        Быстрое выполнение - до 50 мс., среднее - 50-150 мс., медленное - более 150 мс.

        Если это значение существенно превышает прошедшее время (см.ниже), это может указывать на то, что ваше приложение активно использует процессор и выполняет большое количество вычислений.

      4. Elapsed time (Прошедшее время): Это общее время, прошедшее с момента начала выполнения запроса до его завершения.

        Быстрое выполнение - до 100 мс., среднее - 100-500 мс., медленное - более 500 мс.

        Если это значение существенно больше, чем общее время CPU, это может указывать на то, что ваше приложение тратит много времени на ожидание ввода-вывода или блокирующих операций. В этом случае вы можете попробовать оптимизировать доступ к внешним ресурсам или использовать асинхронное программирование для уменьшения времени ожидания.

      5. Context switches (Переключения контекста): Это количество переключений контекста процессора, которые произошли во время выполнения запроса.

        Низкое кол-во переключений - до 100, среднее - 100-500, высокое - более 500 переключений.

        Высокое количество переключений контекста может указывать на то, что ваше приложение интенсивно использует процессор и вызывает значительные накладные расходы на управление контекстом. В этом случае вы можете попробовать оптимизировать ваше приложение для уменьшения количества переключений контекста, например, уменьшив количество потоков или процессов, выполняемых параллельно.

      ЭтапОписаниеДиапазон значений
      domainLookup (Поиск домена)Время, затраченное на разрешение доменного имени сервера на IP-адрес.Быстрое: до 50 мс Среднее: от 50 мс до 150 мс Медленное: более 150 мс
      connect (Установка соединения)Время, необходимое для установки соединения с сервером после разрешения доменного имени.Быстрое: до 50 мс Среднее: от 50 мс до 150 мс Медленное: более 150 мс
      request (Запрос)Время, затраченное на отправку запроса к серверу после установки соединения.Быстрое: до 100 мс Среднее: от 100 мс до 300 мс Медленное: более 300 мс
      response (Ответ)Время, затраченное на получение ответа от сервера после отправки запроса.Быстрое: до 100 мс Среднее: от 100 мс до 300 мс Медленное: более 300 мс
      domLoading (Загрузка DOM)Время, начиная с момента, когда браузер начал загружать документ HTML, и заканчивая моментом, когда он завершил загрузку начального набора ресурсов.Быстрое: до 100 мс Среднее: от 100 мс до 300 мс Медленное: более 300 мс
      domInteractive(Интерактивность DOM)Время, когда документ полностью загружен и пользователь может начать взаимодействовать с ним.Быстрое: до 100 мс Среднее: от 100 мс до 300 мс Медленное: более 300 мс
      domContentLoadedEvent(Событие загрузки содержимого DOM)Время, когда весь контент DOM был полностью загружен и обработан.Быстрое: до 100 мс Среднее: от 100 мс до 300 мс Медленное: более 300 мс
      loadEvent (Событие загрузки)Время, когда весь контент, включая изображения, стили, скрипты и дополнительные ресурсы, был полностью загружен.Быстрое: до 200 мс Среднее: от 200 мс до 500 мс Медленное: более 500 мс
  4. Settings

    • Отображает все текущие настройки вашего Django-проекта, включая параметры базы данных, настройки приложений, настройки шаблонов и многое другое.
    • Это позволяет быстро и удобно проверить текущие конфигурационные параметры вашего проекта.
  5. Headers

    • Предоставляет обзор HTTP-заголовков запросов и ответов, а также важные переменные среды WSGI.
    • Иногда проблемы с веб-приложением могут быть связаны с неправильными или отсутствующими заголовками в запросе. Панель Headers позволяет легко проверить, какие заголовки были отправлены в запросе, и убедиться, что они соответствуют ожидаемым значениям.
  6. Request

    • Панель Request отображает параметры GET и POST запросов, что позволяет легко просматривать данные, отправленные клиентом на сервер.
    • Это полезно для отслеживания передаваемых пользовательских данных и анализа их влияния на работу вашего приложения.
  7. SQL

    • Подробно описывает все SQL-запросы, выполненные во время запроса, включая время выполнения.
    • Просмотр списка SQL-запросов помогает определить, сколько запросов выполняется при обработке каждого запроса к вашему приложению. Это может помочь выявить избыточное количество запросов и оптимизировать работу приложения.
    • Панель SQL позволяет выявить проблемы с базой данных, такие как медленные запросы, блокировки или неправильные индексы.
    • Action
      1. Select (Выбрать): Эта вкладка отображает информацию о SQL-запросах типа SELECT, которые были выполнены веб-приложением во время обработки запросов. Она включает в себя текст выполненного запроса, а также время, затраченное на его выполнение.
      2. Explain (Объяснить): Эта вкладка позволяет получить объяснение выполнения конкретного SQL-запроса. Она отображает план выполнения запроса, который показывает, как база данных планирует выполнять запрос, какие индексы используются и какие операции выполняются для получения результатов. Это полезно для анализа производительности запроса и оптимизации его выполнения.
  8. Static files

    • Панель Static Files позволяет быстро просматривать список загруженных статических файлов и их местоположение.
    • Это позволяет идентифицировать лишние или ненужные файлы, которые могут замедлять загрузку страницы, и удалить их из проекта.
  9. Templates

    • В этой вкладке отображается список шаблонов, которые были загружены и использованы для формирования текущей страницы. Каждый шаблон указывается с его путем и именем файла.
    • Для каждого загруженного шаблона отображается контекст, который был передан в шаблон при его рендеринге. Это позволяет легко просматривать данные, доступные в шаблоне, и убедиться, что они соответствуют ожидаемым значениям.
    • Панель Templates также предоставляет возможность просматривать исходный код каждого загруженного шаблона прямо из интерфейса отладочной панели. Это полезно для быстрого анализа содержимого шаблонов и поиска проблем или ошибок в них.
  10. Cache

    • Панель Cache отображает список запросов к кэшу, которые выполняются в процессе обработки запросов к приложению.
    • Это позволяет видеть, какие части приложения активно используют кэширование и какие именно запросы выполняются.
    • Несовместимость с функцией кэширования веб-сайтов в Django. Панель Cache не будет отображать информацию о “per-site caching” (кэшировании для всего сайта), поскольку она не предназначена для анализа и отслеживания кэширования целых HTML-страниц.
  11. Signals

    • Панель Signals отображает список всех сигналов, которые были отправлены в процессе обработки текущего запроса. Это может быть полезно для отслеживания того, какие события происходят в приложении и когда они происходят.
  12. Redirects

    • Когда эта панель включена, панель инструментов отладки будет показывать промежуточную страницу при перенаправлении, чтобы вы могли просмотреть любую отладочную информацию перед перенаправлением. Эта страница будет содержать ссылку на место назначения перенаправления, по которой вы сможете перейти, когда будете готовы.
    • Отключена по умолчанию. Можете включить с помощью конфигурации DISABLE_PANELS.
  13. Profiling

    • Панель Profiling предоставляет информацию о вызовах функций, которые происходят в процессе обработки запроса. Это может помочь выявить функции, которые занимают большое количество времени выполнения, и сосредоточить усилия на их оптимизации.
    • По умолчанию неактивна. Активация через DISABLE_PANELS.
    • Исключаются функции в "/site-packages/" или "/dist-packages/".

Настройка

Можно кастомизировать отображение панелей с помощью настройки переменной DEBUG_TOOLBAR_PANELS в settings.py.

DEBUG_TOOLBAR_PANELS = [
    'debug_toolbar.panels.history.HistoryPanel',
    '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.redirects.RedirectsPanel',
    'debug_toolbar.panels.profiling.ProfilingPanel',
]

Комментируем или удаляем строчки для панелей, информацию которых мы хотели бы скрыть)

〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰