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.
3
Опитування
Вступ до Django Message Framework, рівень 14, лекція 4
Недоступний
Вступ до Django Message Framework
Вступ до Django Message Framework
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ