Django-debug-toolbar: Фильтрация по запрошенному URL

Созданный на 29 мая 2012  ·  3Комментарии  ·  Источник: jazzband/django-debug-toolbar

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

Поэтому я предлагаю вариант конфигурации для _фильтрации (не отображения) панели инструментов на страницах, URL-адреса которых соответствуют определенному шаблону_ (или регулярному выражению). Например, если вы используете панель администратора Django, но не разрабатываете в ней что-либо, вам не нужна панель инструментов отладки, поэтому было бы неплохо отфильтровать панель инструментов для всех запросов под '^admin/' . Такая же потребность возникает, если у вас есть страница с множеством небольших фреймов, и вы просто хотите отлаживать внешнее приложение и шаблоны Django, а не те, которые находятся в маленьких фреймах - здесь было бы неплохо скрыть панель инструментов для всех запросов к приложению с iframe.

Поэтому рекомендуется иметь одно или несколько регулярных выражений для фильтрации, в которых должна отображаться панель инструментов на основе запрошенного URL-адреса. Например, как сложное регулярное выражение или как список более простых регулярных выражений:

DEBUG_TOOLBAR_CONFIG = ( ... 'HIDE_FILTER_URL': '^admin/|^myapp/someview', ... )
or
DEBUG_TOOLBAR_FILTER_URL = ('^admin/', '^myapp/someview')

Все 3 Комментарий

Я столкнулся с той же проблемой и согласился с gw0 в предложении реализации общих шаблонов фильтрации для быстрого удаления панели инструментов с совпадающих URL-адресов. Просто намек.

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

Теперь, когда # 324 исправлен, реализовать это стало очень просто. Вот как бы вы исключили админа:

from debug_toolbar.middleware import show_toolbar

def custom_show_toolbar(request):
    return show_toolbar(request) and not request.path.startswith('/admin/')

Вот как можно исключить серию префиксов URL:

from debug_toolbar.middleware import show_toolbar

excluded_urls = ['/foo', '/bar']

def custom_show_toolbar(request):
    excluded = any(request.path.startswith(url) for url in excluded_urls)
    return show_toolbar(request) and not excluded

Я не думаю, что было бы проще использовать DSL для фильтрации URL-адресов. Обычный Python - подходящий инструмент для этого класса проблем.

В любом случае спасибо за предложение!

Для всех, кто попадает сюда, кажется, что строка from debug_toolbar.middleware import show_toolbar запускает раннюю оценку настроек Django Debug Toolbars, а это означает, что любые последующие изменения в настройках не будут прочитаны. Мне нужно было выполнить импорт внутри функции, чтобы мои настройки вступили в силу.

def custom_show_toolbar(request):
    from debug_toolbar.middleware import show_toolbar

    return show_toolbar(request) and not request.path.startswith("/graphql")

DEBUG_TOOLBAR_CONFIG = {"SHOW_TOOLBAR_CALLBACK": custom_show_toolbar}
Была ли эта страница полезной?
0 / 5 - 0 рейтинги