📝 Django

Миксины в Django CBV

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
80
🌳
Уровень
Продвинутый
🐦 💼 ✈️

Миксины — небольшие классы, добавляющие одно поведение к CBV через множественное наследование.

Встроенные миксины

LoginRequiredMixin

from django.contrib.auth.mixins import LoginRequiredMixin

class TaskListView(LoginRequiredMixin, ListView):
    model = Task
    login_url = '/login/'           # куда редиректить
    redirect_field_name = 'next'    # параметр для возврата

PermissionRequiredMixin

from django.contrib.auth.mixins import PermissionRequiredMixin

class TaskCreateView(PermissionRequiredMixin, CreateView):
    model = Task
    permission_required = 'tasks.add_task'
    # или несколько прав:
    permission_required = ['tasks.add_task', 'tasks.view_project']

UserPassesTestMixin

from django.contrib.auth.mixins import UserPassesTestMixin

class TaskEditView(UserPassesTestMixin, UpdateView):
    model = Task

    def test_func(self):
        task = self.get_object()
        return self.request.user == task.owner

Кастомный миксин

class OwnerRequiredMixin:
    """Разрешает доступ только владельцу объекта."""

    def get_queryset(self):
        qs = super().get_queryset()
        return qs.filter(owner=self.request.user)

class TaskDetailView(LoginRequiredMixin, OwnerRequiredMixin, DetailView):
    model = Task

Порядок наследования (MRO)

# Правильный порядок: миксины ПЕРЕД базовым классом
class TaskView(LoginRequiredMixin, OwnerRequiredMixin, DetailView):
    ...

# НЕправильно: базовый класс первым
class TaskView(DetailView, LoginRequiredMixin):  # LoginRequired не сработает
    ...

Python использует C3 linearization — super() вызывает следующий класс в MRO слева направо.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 132
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 84
📝

Django: Статические файлы

Статические файлы — CSS, JavaScript, изображения, шрифты. Django обрабатывает их особым образом: в разработке раздаёт...

📅 30.06.2026 👁️ 73

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!