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

Практическое занятие по добавлению уведомлений в Django-приложение

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

Давайте создадим полноценный практический пример — систему уведомлений для текущего проекта, добавив сообщения в сборный код нашего приложения, чтобы уведомлять пользователей о результатах их взаимодействий.

В ходе занятия вы:

  1. Реализуете уведомления для операций CRUD (создание, чтение, обновление, удаление).
  2. Настроите отображение сообщений в шаблонах.
  3. Добавите уведомления с редиректом.
  4. Сделаете кастомизацию внешнего вида сообщений для улучшения пользовательского опыта.

Шаг 1: подготовка окружения и базовые настройки

Прежде чем приступить к реализации, убедимся, что наше приложение готово к добавлению системы сообщений.

Для начала убедитесь, что Django Message Framework подключен в вашем проекте. По умолчанию, он уже включён, но проверить это никогда не помешает (ведь программисты — существа ленивые, но дотошные!).

В файле settings.py проверьте наличие django.contrib.messages в настройке INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'django.contrib.messages',
    ...
]

Теперь откройте settings.py и убедитесь, что MIDDLEWARE содержит MessageMiddleware:

MIDDLEWARE = [
    ...
    'django.contrib.messages.middleware.MessageMiddleware',
    ...
]

Если эти компоненты подключены, мы готовы к работе!

Шаг 2: добавление сообщений в представления

Давайте реализуем уведомления в представлениях. Мы будем использовать операции CRUD в качестве основы для нашей логики.

Предположим, что у нас есть модель Task для управления списком задач:

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

Создадим простое представление для добавления задач с уведомлением о результате.

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

def create_task(request):
    if request.method == 'POST':
        title = request.POST.get('title')
        description = request.POST.get('description')

        if title and description:
            Task.objects.create(title=title, description=description)
            messages.success(request, 'Задача успешно создана!')
        else:
            messages.error(request, 'Не удалось создать задачу. Проверьте введённые данные.')
        return redirect('task_list')

    return render(request, 'tasks/create_task.html')

В данном коде:

  • Сообщение success появляется, если задача была успешно создана.
  • - Сообщение error отображается в случае ошибки.

Редактирование задач с уведомлением

Теперь добавим возможность редактировать задачи вместе с уведомлениями.

from django.shortcuts import get_object_or_404

def edit_task(request, task_id):
    task = get_object_or_404(Task, id=task_id)

    if request.method == 'POST':
        title = request.POST.get('title', task.title)
        description = request.POST.get('description', task.description)

        task.title = title
        task.description = description
        task.save()

        messages.info(request, 'Задача успешно обновлена.')
        return redirect('task_list')

    return render(request, 'tasks/edit_task.html', {'task': task})

Удаление задачи с уведомлением

И напоследок — удаление задачи:

def delete_task(request, task_id):
    task = get_object_or_404(Task, id=task_id)
    task.delete()
    messages.warning(request, f'Задача "{task.title}" была удалена.')
    return redirect('task_list')

Шаг 3: отображение сообщений в шаблонах

Чтобы уведомления отображались в интерфейсе, добавим в базовый шаблон блок для рендера сообщений.

Откройте base.html и добавьте следующий код:

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

Стилизация уведомлений

Используя CSS-фреймворк Bootstrap, сообщения автоматически станут стильными благодаря классу alert-{type}. Например:

  • alert-success для успешных сообщений,
  • alert-success для успешных сообщений,
  • alert-danger для ошибок и т.д.

Не забудьте подключить Bootstrap в ваш базовый шаблон:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">

Шаг 4: Уведомления с редиректами

Очень часто после выполнения действия (например, сохранения формы) требуется автоматически перенаправить пользователя на другую страницу. Мы уже добавили такие примеры выше, например, в функции create_task. Разберём это подробнее на ещё одном примере.

from django.http import HttpResponseRedirect

def mark_as_completed(request, task_id):
    task = get_object_or_404(Task, id=task_id)
    task.completed = True
    task.save()
    messages.success(request, f'Задача "{task.title}" отмечена как выполненная.')
    return HttpResponseRedirect('/tasks/')

Здесь мы:

  1. Обновляем статус задачи.
  2. Добавляем сообщение.
  3. Редиректим пользователя на список задач.

Шаг 5: работа с временными сообщениями

Все сообщения в Django Message Framework по умолчанию являются временными. Это значит, что они исчезают после отображения. Для демонстрации проверим, как это работает:

  1. Добавьте обработку сообщений в create_task (мы это уже сделали в шаге 2).
  2. Откройте страницу создания задачи, создайте задачу.
  3. Перейдите на другую страницу (например, список задач) — сообщение должно появиться.
  4. Обновите страницу — сообщения исчезнут.

Временные сообщения подойдут для редиректов, когда вы хотите уведомить пользователя только один раз после выполнения действия.

Шаг 6: финальное задание

Теперь, когда вы знаете, как настроить Django Message Framework, у нас есть задание для вас.

  1. Настройте Django Message Framework в вашем проекте, если вы этого ещё не сделали.
  2. Добавьте уведомления для следующих действий:
    • Создание объекта (например, новый пост, новая задача, новый элемент).
    • Редактирование объекта.
    • Удаление объекта.
    • Ошибки при выполнении действий (например, неправильные данные в форме).
  3. Стилизуйте сообщения, используя Bootstrap или другой CSS-фреймворк.
  4. Убедитесь, что вы используете временные сообщения, и протестируйте их поведение при редиректах.

Пункты проверки:

  • Сообщения появляются при каждом из действий (CRUD).
  • Сообщения исчезают после отображения (или перезагрузки страницы).
  • Сообщения стилизованы для читабельности.

Теперь у вас есть возможность применить всё, что мы изучили, в своём проекте. Внимание к деталям, таким как уведомления, делает ваши приложения удобными для пользователя и даёт множество бонусов на собеседованиях!

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