РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
541 of 818 menu

Декоратор 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,
    который проверяет аутентификацию пользователя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить