Как в Django ограничить доступ к представлению (view) только для авторизованных пользователей?

Ответ

В Django для ограничения доступа к представлениям (views) используются два основных подхода в зависимости от типа представления:

  1. Для представлений-функций (FBV): Декоратор @login_required Декоратор применяется непосредственно к функции. Если пользователь не аутентифицирован, он будет перенаправлен на страницу входа.

    from django.contrib.auth.decorators import login_required
    from django.shortcuts import render
    
    @login_required
    def protected_view(request):
        # Логика, доступная только авторизованным пользователям
        return render(request, 'secret_template.html')
  2. Для представлений-классов (CBV): Миксин LoginRequiredMixin Миксин добавляется в список базовых классов представления. Он должен стоять перед основным классом представления (например, View или TemplateView).

    from django.contrib.auth.mixins import LoginRequiredMixin
    from django.views.generic import TemplateView
    
    class ProtectedView(LoginRequiredMixin, TemplateView):
        template_name = 'secret_template.html'

В обоих случаях, если пользователь не авторизован, Django перенаправит его на страницу входа. URL страницы входа по умолчанию — /accounts/login/, но его можно переопределить в файле settings.py с помощью параметра LOGIN_URL.