Django 5 для начинающих

Прогресс по курсу:  9/1004

10.11 Использование миксинов в работе с представлениями Django
2 из 3 шагов пройдено
0 из 3 баллов  получено

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

Теперь давайте в нашей папке services, которую мы создали в 10.4 "Работа с DetailView, форматирование и обработка кириллицы в Slug" создадим файл mixins.py, и добавим следующий код:

from django.contrib.auth.mixins import AccessMixin
from django.contrib import messages
from django.shortcuts import redirect


class AuthorRequiredMixin(AccessMixin):

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return self.handle_no_permission()
        if request.user.is_authenticated:
            if (request.user != self.get_object().author) or not request.user.is_staff:
                messages.info(request, 'Изменение статьи доступно только автору!')
                return redirect('home')
        return super().dispatch(request, *args, **kwargs)

В примере выше мы создали миксин наследуясь от основного AccessMixin и добавили возможность редактирования статьи только автору и администратору. Давайте воспользуемся нашим миксином в представлении обновления записей PostUpdateView:

from ..services.mixins import AuthorRequiredMixin


class PostUpdateView(AuthorRequiredMixin, SuccessMessageMixin, UpdateView):
    """
    Представление: обновления материала на сайте
    """
    model = Post
    template_name = 'blog/post_update.html'
    context_object_name = 'post'
    form_class = PostUpdateForm
    login_url = 'home'
    success_message = 'Запись была успешно обновлена!'

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = f'Обновление статьи: {self.object.title}'
        return context

    def form_valid(self, form):
        # form.instance.updater = self.request.user
        form.save()
        return super().form_valid(form)

В этом коде мы убрали LoginRequiredMixin, так как данная логика уже добавлена в кастомный миксин AuthorRequiredMixin. Осталось проверить на сайте, запустим сервер и попробуем обновить запись как гость:

Мы видим что нас переправило на главную страницу нашего блога. Теперь авторизуемся как администратор, и попробуем изменить записи:

Отлично, наши миксины работают, в следующих разделах мы добавим систему регистрации и авторизации для нашего блога.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Осталось проверить на сайте, запустим сервер и попробуем обновить запись как гость

Это получится проверить, когда будет создан весь функционал авторизации для пользователей.

@Евгений_Куликов, По идее да, но авторизоваться как администратор можно через админ панель. Я думаю поменяем местами этот раздел и следующий, будет более логично.

Не хватает импорта AuthorRequiredMixin

@Valerii_Umerenkov, спасибо, добавил