Ответ 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..):
...
Когда я пытаюсь использовать staff_view, я перенаправляюсь в интерфейсе аутентификации администратора.
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def staff_view(request..):
...
Как я могу сделать пользовательский вход и не перенаправляться в интерфейс входа в систему по умолчанию?
Вы можете использовать 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..):
...
Стоит отметить, что staff_member_required
является оберткой вокруг user_passes_test
(см. исходный код), и он также принимает login_url
параметр, чтобы вы могли:
@staff_member_required(login_url=None)
def staff_view(request..):
Если вы перенаправляетесь на обычный логин, хотя (как я уже делал выше), это может привести обычного пользователя в цикл переадресации, например.