Как использовать django-debug-toolbar для вызовов AJAX?

Мне любопытно, есть ли разумный способ использовать (удивительную) панель инструментов django-debug с запросами AJAX.

Например, я использую jQuery $.get с набором параметров, чтобы попасть в URL-адрес Django и загрузить его в строку. Если у меня есть ошибка, она не зарегистрирована на панели инструментов. Я также не могу использовать его, копируя URL-адрес AJAX, потому что DDT присоединяется к тегу body ответа, и не имеет смысла включать теги тела с ответами AJAX.

Любое направление было бы полезно! Спасибо!

Ответ 1

У меня была такая же проблема раньше! И поскольку я делаю все больше и больше приложений AJAX, я выпустил приложение Django и расширение Chrome которые вместе решили именно эту проблему.

Вся информация содержится в репозитории github.

Ответ 2

Я написал панель истории запросов для панели инструментов Django Debug, которая может быть добавлена ​​в панель инструментов Debug Django для просмотра запросов, отличных от текущего ( включая запросы AJAX).


Установить через pip:

pip install git+https://github.com/djsutho/django-debug-toolbar-request-history.git


В settings.py добавьте 'ddt_request_history.panels.request_history.RequestHistoryPanel' в DEBUG_TOOLBAR_PANELS например:

DEBUG_TOOLBAR_PANELS = [
    'ddt_request_history.panels.request_history.RequestHistoryPanel',  # Here it is 
    '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.templates.TemplatesPanel',
    'debug_toolbar.panels.staticfiles.StaticFilesPanel',
    'debug_toolbar.panels.cache.CachePanel',
    'debug_toolbar.panels.signals.SignalsPanel',
    'debug_toolbar.panels.logging.LoggingPanel',
    'debug_toolbar.panels.redirects.RedirectsPanel',
    'debug_toolbar.panels.profiling.ProfilingPanel',
]


Чтобы записать ajax-запросы, переопределите SHOW_TOOLBAR_CALLBACK в DEBUG_TOOLBAR_CONFIG (также в settings.py), например:

DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': 'ddt_request_history.panels.request_history.allow_ajax',
}

Ответ 3

Ddt подключается к ответу, что означает, что нет стандартного способа просмотра его панелей для запроса AJAX. Кроме того, ответ AJAX может быть в формате JSON, что делает невозможным включение ddt в него.

Лично я бы нашел способ регистрации вывода ddt в текстовый файл или, возможно, он поддерживает архитектуру клиент-сервер, в которой клиент работает внутри обработчика запросов AJAX и отправляет данные на сервер? Я не знаю, что возможно, так как есть дюжины клонов ddt.

Ответ 4

Я недавно ударил эту проблему. Мое быстрое n-грязное, но работающее решение состояло только в том, чтобы добавить некоторые HTML-виды, чтобы сгибать один и тот же код.

Так, например, если я вижу в NewRelic, что 90% времени моего веб-сайта тратится на вызов ajax в /search _for_book? title=, мой код может выглядеть примерно так:

views.py:

def search_for_book(request, title):
    data = _search_for_book(title)
    return json_response(data)

def test_search_for_book(request, title):
    data = _search_for_book(title)
    return http_response(data)

Узкое место будет где-то в коде _search_for_book; мы называем это ajax, не имеет значения для диагностики его неэффективности (в моем случае, по крайней мере, YMMV)