2009-06-22 4 views
14

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

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

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

Приветствия

Paul

ответ

6

Вы можете проверить путь в 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 
0

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

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

25

Общий путь будет (на основе ответа piquadrat в)

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

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

+0

Имейте в виду, что ваши пути могут иметь языковой префикс! (например,/en/admin) – Florian

 Смежные вопросы

  • Нет связанных вопросов^_^