Ответ
В Django для ограничения доступа к представлениям (views) используются два основных подхода в зависимости от типа представления:
-
Для представлений-функций (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') -
Для представлений-классов (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.
Ответ 18+ 🔞
А, ну вот, смотри, классическая дилемма — как отвадить всяких левых пидоров от твоего священного кода. В Django, блядь, два главных подхода, и они зависят от того, какую хуйню ты пишешь: функцию или класс.
-
Если ты старомодный уёбок и любишь функции (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') -
Если ты модный пидорок и юзаешь классы (CBV): Миксин
LoginRequiredMixinТут уже чуть хитрее, но тоже нихуя сложного. Подмешиваешь этот миксин в свой класс, и главное — поставь его ПЕРЕД основным классом вродеView, а то нихуя не сработает, ёпта!from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import TemplateView class ProtectedView(LoginRequiredMixin, TemplateView): template_name = 'secret_template.html'
В обоих случаях, если какой-нибудь распиздяй без логина попробует зайти, Django его аккуратно, но настойчиво пошлёт на страницу входа. По умолчанию это /accounts/login/, но если тебе не нравится этот путь — ебашь в settings.py параметр LOGIN_URL и пропиши туда что душе угодно. Всё, вопрос закрыт, можно идти пить чай.