Как игнорировать медиа и статические URL-адреса в промежуточном программном обеспечении Django - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь перенаправить пользователей, у которых нет разрешения на просмотр этой страницы. В моей базе данных я сохранил имена URL. Пример - company_list

path('company/list', CompanyListView.as_view(), name='company_list'),

Теперь я использую EXEMPT_URLS, где сохраняются имена URL и пользователь освобождается от этих URL.

EXEMPT_URLS = [
    'login',
    'logout',
    'superadmin_dashboard',
    'admin_dashboard',
]

class PermissionRequiredMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        response = self.get_response(request)
        return response

    def process_view(self, request, view_func, view_args, view_kwargs):

        assert hasattr(request, 'user')

        current_url = resolve(request.path_info).url_name

        print(request.path_info)

        if request.user.is_authenticated and current_url not in EXEMPT_URLS :
           if request.user.userprofile.user_role_id == 1:
                return redirect('superadmin_dashboard')
            else:
                return redirect('admin_dashboard')

Теперь проблема здесь. Как я добавляю компанию и ее логотип. и когда я иду к company_list, он показывает мне список, но не изображения.

"GET /media/user_profiles/logo_L7T5FKg.png HTTP/1.1" 302

Я обнаружил проблему, когда я прокомментировал def process_view(), она показывает мне изображения в моем шаблоне. Но когда я раскомментирую его, он не показывает изображения. В основном мое промежуточное ПО блокирует это "GET /media/user_profiles/logo_L7T5FKg.png HTTP/1.1" 302.

Как мне указать имя этого изображения и вставить в него EXEMPT_URLS

1 Ответ

0 голосов
/ 25 января 2019

В основном я перенаправлял на панель управления, если у пользователя нет прав.Так что в моем промежуточном программном обеспечении MEDIA and STATIC URL получал HTTP response status code 302 Found, потому что для MEDIA AND STATIC URL также работало мое специальное промежуточное программное обеспечение.Поэтому, чтобы игнорировать, я нашел request.path.

from django.conf import settings
    ...

    MEDIA_URL = request.path.startswith(settings.MEDIA_URL)
    STATIC_URL = request.path.startswith(settings.STATIC_URL)

    if request.user.is_authenticated and current_url not in EXEMPT_URLS and not MEDIA_URL and not STATIC_URL:
        if request.user.userprofile.user_role_id == 1:
            return redirect('superadmin_dashboard')
        else:
            return redirect('admin_dashboard')
...