2009-06-22 23 views
14

Tôi muốn sử dụng một số phần mềm trung gian tôi đã viết trên toàn bộ trang web của mình (số lượng lớn trang, vì vậy tôi đã chọn không sử dụng trang trí như tôi muốn sử dụng mã tất cả các trang). Chỉ có vấn đề là tôi không muốn sử dụng phần mềm trung gian cho mã quản trị, và nó có vẻ hoạt động trên chúng.Điều kiện trung gian Django có điều kiện (hoặc cách loại trừ hệ thống quản trị)

Có cách nào để tôi có thể định cấu hình settings.py hoặc urls.py có thể, hoặc có thể một cái gì đó trong mã để ngăn không cho nó thực thi trên các trang trong hệ thống quản trị?

Bất kỳ giúp nhiều đánh giá cao,

Cheers

Paul

Trả lời

6

Bạn có thể kiểm tra đường dẫn ở process_request (và bất kỳ quá trình khác _ * - phương pháp trong middleware của bạn)

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

Các lý do chính tôi muốn làm điều này là sử dụng một trình phân tích cú pháp XML trong phần mềm trung gian, điều này đã làm rối tung các bản tải xuống không phải XML. Tôi đã đặt một số mã bổ sung để phát hiện nếu mã là XML và không cố gắng phân tích cú pháp bất cứ điều gì mà nó không nên.

Đối với phần mềm trung gian khác, nơi điều này sẽ không thuận tiện, tôi có thể sử dụng phương pháp gợi ý phác thảo ở trên, hoặc có thể chỉ sử dụng trình xem trang - Chúc mừng piquadrat!

25

Một cách tổng quát sẽ được (dựa trên câu trả lời của piquadrat)

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

cách này, nếu một người nào đó thay đổi /admin/ để /django_admin/ bạn vẫn được bảo hiểm.

+0

hãy nhớ rằng đường dẫn của bạn có thể có tiền tố ngôn ngữ! (ví dụ:/en/admin) – Florian