JavaRush /Курсы /Модуль 3: Django /Примеры использования сообщений в представлениях

Примеры использования сообщений в представлениях

Модуль 3: Django
14 уровень , 4 лекция
Открыта

Сегодня мы будем осваивать на практике, как использовать Django Message Framework в представлениях (views). На этом этапе вы уже знаете, что такое Message Framework и как его настроить. Теперь настало время добавить уведомления в функциональные элементы нашего веб-приложения и сделать их полезными для пользователя.

🚀 Как сообщить пользователю о результате его действий?

Мы уже отвечали на этот вопрос раньше, и в случае с Django ответ прост: используем Message Framework.

Django Message Framework — это палочка-выручалочка для отображения уведомлений о результатах действий пользователя. Мы добавляем сообщения в представления, чтобы информировать пользователей о полученном результате:

  • Форма успешно сохранена.
  • Указаны некорректные данные.
  • Объект удалён.
  • У вас недостаточно прав для выполнения действия.

🧑‍💻 Как добавлять сообщения в функциональные представления (FBV)?

Функциональные представления (Function-Based Views) — это простейший способ работы с Django представлениями. Давайте разберем базовый пример:

📌 Добавление сообщения при успешной загрузке данных

Код говорит всё:

from django.shortcuts import render, redirect
from django.contrib import messages

def create_post(request):
    if request.method == "POST":
        title = request.POST.get("title")
        if title:  # Проверяем, есть ли заголовок
            # Логика сохранения данных
            messages.success(request, "Пост успешно создан!")  # Успешное сообщение
            return redirect("post_list")  # Редирект на список постов
        else:
            messages.error(request, "Ошибка: Заголовок обязателен!")  # Ошибка
    return render(request, "create_post.html")

Вот то здесь происходит:

  1. Мы проверяем POST-запрос, чтобы узнать, отправил ли пользователь форму.
  2. Если всё успешно, добавляем сообщение с типом success и редиректим пользователя.
  3. Если что-то пошло не так, выводим сообщение об ошибке с типом error.
🛠 Попробуйте сами:

измените сообщение в зависимости от логики! Например, добавьте типы warning или info.

🛠 Добавление сообщений в классовые представления (CBV)

Классовые представления (Class-Based Views) предоставляют больше гибкости. Вот пример:

from django.views.generic.edit import CreateView
from django.contrib import messages
from django.urls import reverse_lazy
from .models import Post

class PostCreateView(CreateView):
    model = Post
    fields = ['title', 'content']
    template_name = 'post_form.html'
    success_url = reverse_lazy('post_list')

    def form_valid(self, form):
        # Если форма валидна, добавляем сообщение об успехе
        messages.success(self.request, "Пост успешно создан!")
        return super().form_valid(form)

    def form_invalid(self, form):
        # Если форма не валидна, добавляем сообщение об ошибке
        messages.error(self.request, "Ошибка: Проверьте форму.")
        return super().form_invalid(form)
  • form_valid() — вызывается при успешной отправке формы.
  • form_invalid() — вызывается при ошибке заполнения формы.
  • Используем messages.success для успеха и messages.error для ошибок.
⚡️ Полезно знать:

CBV удобно кастомизировать, добавляя свои методы. Это экономит время на написание кода.

🤹 Пример использования в CRUD-операциях

Теперь построим полноценный рабочий CRUD-пример с уведомлениями. Используем FBV:

from django.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, "post_list.html", {"posts": posts})

def post_create(request):
    if request.method == "POST":
        title = request.POST.get("title")
        if title:
            Post.objects.create(title=title)
            messages.success(request, "Пост добавлен.")
        else:
            messages.error(request, "Ошибка: Заголовок обязателен.")
        return redirect("post_list")
    return render(request, "post_create.html")

def post_update(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        title = request.POST.get("title")
        if title:
            post.title = title
            post.save()
            messages.success(request, "Пост обновлён.")
        else:
            messages.warning(request, "Заголовок не может быть пустым.")
        return redirect("post_list")
    return render(request, "post_update.html", {"post": post})

def post_delete(request, pk):
    post = get_object_or_404(Post, pk=pk)
    post.delete()
    messages.info(request, f"Пост '{post.title}' удалён.")
    return redirect("post_list")

🖼 Схема уведомлений: типы и примеры

Действие Тип сообщения Пример текста
Создание поста success "Пост успешно создан."
Пустое поле ввода error "Ошибка: Поле ввода не может быть пустым."
Обновление данных success "Пост успешно обновлён."
Удаление поста info "Пост был удалён."
Внимание warning "Заголовок не должен быть пустым."

🎨 Отображение сообщений в шаблонах

Давайте добавим HTML-код для отображения сообщений. Вставьте следующий блок кода в базовый шаблон base.html:

{% if messages %}
    <div>
        {% for message in messages %}
            <div class="alert alert-{{ message.tags }}">
                {{ message }}
            </div>
        {% endfor %}
    </div>
{% endif %}

Стилевая магия ✨

Мы используем класс alert в этом примере (например, от Bootstrap). Уровень сообщения автоматически подставит CSS-класс, например:

  • successalert-success
  • erroralert-danger
  • warningalert-warning
  • infoalert-info

💡 Типичные ошибки при использовании сообщений

Когда начинаем работать с Message Framework, могут возникнуть некоторые нюансы:

  1. Сообщения не отображаются. Проверьте, подключен ли context_processors.messages в настройках TEMPLATES.

  2. Сообщения не очищаются. Это обычное поведение фреймворка. Сообщение удалится автоматически после первого отображения, если всё настроено корректно.

  3. Много однотипных сообщений. Вы можете случайно добавить одно и то же сообщение несколько раз. Контролируйте добавление сообщений в коде.

📝 Практическое задание

  1. Реализуйте логику уведомлений success и error в своём проекте.
  2. Добавьте сообщения для всех CRUD-действий (создание, обновление, удаление).
  3. Кастомизируйте внешний вид сообщений с помощью CSS.
1
Задача
Модуль 3: Django, 14 уровень, 4 лекция
Недоступна
Уведомления для добавления и удаления задачи
Уведомления для добавления и удаления задачи
1
Задача
Модуль 3: Django, 14 уровень, 4 лекция
Недоступна
Реализация уведомлений для редактирования профиля пользователя
Реализация уведомлений для редактирования профиля пользователя
3
Опрос
Введение в Django Message Framework, 14 уровень, 4 лекция
Недоступен
Введение в Django Message Framework
Введение в Django Message Framework
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ