Если пользователь не авторизован — редирект на settings.LOGIN_URL с параметром ?next=/current-url/.
Декоратор для FBV
from django.contrib.auth.decorators import login_required
@login_required
def my_profile(request):
return render(request, 'profile.html', {'user': request.user})
# Кастомный URL для входа
@login_required(login_url='/custom/login/')
def secret_view(request):
...
Если пользователь не авторизован — редирект на settings.LOGIN_URL с параметром ?next=/current-url/.
LoginRequiredMixin для CBV
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView
class TaskListView(LoginRequiredMixin, ListView):
model = Task
template_name = 'tasks/list.html'
login_url = '/accounts/login/' # куда редиректить
redirect_field_name = 'next' # имя GET-параметра
Миксин должен идти первым в списке родителей.
settings.LOGIN_URL
# settings.py
LOGIN_URL = '/accounts/login/' # по умолчанию
LOGIN_REDIRECT_URL = '/' # после успешного входа
LOGOUT_REDIRECT_URL = '/accounts/login/' # после выхода
Проверка в коде view
def my_view(request):
if not request.user.is_authenticated:
return redirect('login')
# дальнейший код только для авторизованных
UserPassesTestMixin — кастомные условия
from django.contrib.auth.mixins import UserPassesTestMixin
class AdminOnlyView(UserPassesTestMixin, ListView):
model = Task
def test_func(self):
return self.request.user.is_staff # только staff
def handle_no_permission(self):
return redirect('home') # кастомный редирект при отказе
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!