Как перенаправить пользователей, которые пытаются получить доступ к админке в Django? - PullRequest
0 голосов
/ 12 сентября 2011

Я заметил интересную проблему с админкой Django. Если я отозваю разрешения своего персонала и попытаюсь получить прямой доступ к /admin, я обычно ожидаю перенаправление на мою страницу входа с /admin/ в строке запроса в качестве будущего перенаправления. Тем не менее, я получаю верную страницу с HTTP-кодом 200, который фактически использует мой шаблон admin/login.html для рендеринга запрашиваемой страницы вместо перенаправления. Кажется, проблема заключается в декораторе @staff_member_required, который, очевидно, использует админская панель.

Вопрос в том, сделано ли это специально? Если нет, то как я могу изменить это поведение без слишком большого количества исправлений?

1 Ответ

0 голосов
/ 13 сентября 2011

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

# Put this code somewhere it will be imported REALLY early

from django.contrib.admin.views import decorators

def staff_member_required(view_func):
    """
    Decorator for views that checks that the user is logged in and is a staff
    member, displaying the login page if necessary.
    """
    def _checklogin(request, *args, **kwargs):
        if request.user.is_active and request.user.is_staff:
            # The user is valid. Continue to the admin page.
            return view_func(request, *args, **kwargs)
        else:
            return HTTPResponseRedirect('/my/login/page/')
    return wraps(view_func)(_checklogin)

decorators.staff_member_required = staff_member_required #replaces the function in-place
...