Условное Django Middleware (или как исключить систему администратора)

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

Можно ли каким-либо образом настроить параметры settings.py или urls.py или, возможно, что-то в коде, чтобы предотвратить его выполнение на страницах в системе администратора?

Любая помощь очень ценится,

Приветствия

Пол

Ответы

Ответ 1

Общий способ был бы (на основе ответа piquadrat)

def process_request(self, request):
    if request.path.startswith(reverse('admin:index')):
        return None
    # rest of method

Таким образом, если кто-то изменит /admin/ на /django_admin/, вы все еще будете закрыты.

Ответ 2

Вы можете проверить путь в process_request (и любые другие процессы _ * - методы в вашем промежуточном программном обеспечении)

def process_request(self, request):
    if request.path.startswith('/admin/'):
        return None
    # rest of method

def process_response(self, request, response):
    if request.path.startswith('/admin/'):
        return response
    # rest of method

Ответ 3

Основная причина, по которой я хотел сделать это, заключалась в использовании XML-анализатора в промежуточном программном обеспечении, которое испортило загрузку без XML. Я добавил дополнительный код для определения того, является ли код XML и не пытается разобрать все, что ему не нужно.

Для другого промежуточного программного обеспечения, где это было бы не удобно, я, вероятно, буду использовать описанные выше схемы piquadrat или, возможно, просто использовать декоратор вида - Cheers piquadrat!