Используйте staff_member_required decorator, но без перенаправления на интерфейс администратора?

Когда я пытаюсь использовать staff_view, я перенаправляюсь в интерфейсе аутентификации администратора.

    from django.contrib.admin.views.decorators import staff_member_required

    @staff_member_required
    def staff_view(request..):
        ...

Как я могу сделать пользовательский вход и не перенаправляться в интерфейс входа в систему по умолчанию?

Ответы

Ответ 1

Вы можете использовать Django user_passes_test decorator:

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u:u.is_staff, login_url=reverse_lazy('foo'))
def staff_view(request..):
    ...

Ответ 2

Стоит отметить, что staff_member_required является оберткой вокруг user_passes_test (см. исходный код), и он также принимает login_url параметр, чтобы вы могли:

@staff_member_required(login_url=None)
def staff_view(request..):

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

  • пользователь регистрируется в
  • пользователь переходит к /staff -url
  • перенаправлено в /accounts/login/? next =/staff-url
  • поскольку пользователь вошел в систему, Django перенаправляет /staff -url
  • вернуться к шагу 3