Декоратор login_required
Декоратор login_required применяется к функциям представления
или классам представлений и перенаправляет неаутентифицированных
пользователей на страницу входа. После успешной аутентификации
пользователь возвращается на исходную страницу. Декоратор
принимает необязательные параметры для настройки URL-адреса
страницы входа и параметра перенаправления.
Синтаксис
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/', redirect_field_name='next')
def my_view(request):
# Только для аутентифицированных пользователей
pass
Пример
Давайте создадим представление для просмотра профиля пользователя, которое доступно только аутентифицированным пользователям:
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def profile_view(request):
user = request.user
context = {
'username': user.username,
'email': user.email,
}
return render(request, 'profile.html', context)
Если пользователь не аутентифицирован, он будет перенаправлен
на страницу входа с параметром 'next', указывающим
исходный URL-адрес.
Пример
Используем декоратор с классом представления через метод dispatch:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView
@method_decorator(login_required, name='dispatch')
class DashboardView(TemplateView):
template_name = 'dashboard.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['user_activity'] = self.get_user_activity()
return context
def get_user_activity(self):
return ["Login", "Profile update", "Logout"]
Пример
Настроим декоратор для использования кастомного URL-адреса страницы входа:
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')
def settings_view(request):
user = request.user
settings_data = {
'username': user.username,
'email': user.email,
'is_active': user.is_active,
}
return render(request, 'settings.html', {'settings': settings_data})
Теперь неаутентифицированные пользователи будут перенаправлены
на '/accounts/login/' вместо стандартного URL-адреса
входа.
Пример
Изменим имя параметра перенаправления с 'next' на кастомное значение:
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required(redirect_field_name='redirect_to')
def dashboard_view(request):
user = request.user
context = {
'user': user,
'is_authenticated': user.is_authenticated,
}
return render(request, 'dashboard.html', context)
Теперь при перенаправлении на страницу входа будет использоваться
параметр 'redirect_to' вместо стандартного 'next'.
Пример
Применяем декоратор к представлению, которое возвращает JSON-ответ:
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
@login_required
def api_user_data(request):
user = request.user
user_data = {
'id': user.id,
'username': user.username,
'email': user.email,
'groups': [group.name for group in user.groups.all()],
}
return JsonResponse(user_data)
Результат выполнения кода для аутентифицированного пользователя:
{
"id": 1,
"username": "john_doe",
"email": "john@example.com",
"groups": ["Editors", "Authors"]
}
Смотрите также
-
декоратор
permission_required,
который проверяет наличие определенных прав у пользователя -
декоратор
user_passes_test,
который применяет пользовательскую проверку к представлению -
класс
User,
представляющий модель пользователя в Django -
атрибут
is_authenticated,
который проверяет аутентификацию пользователя