Давайте создадим полноценный практический пример — систему уведомлений для текущего проекта, добавив сообщения в сборный код нашего приложения, чтобы уведомлять пользователей о результатах их взаимодействий.
В ходе занятия вы:
- Реализуете уведомления для операций CRUD (создание, чтение, обновление, удаление).
- Настроите отображение сообщений в шаблонах.
- Добавите уведомления с редиректом.
- Сделаете кастомизацию внешнего вида сообщений для улучшения пользовательского опыта.
Шаг 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/')
Здесь мы:
- Обновляем статус задачи.
- Добавляем сообщение.
- Редиректим пользователя на список задач.
Шаг 5: работа с временными сообщениями
Все сообщения в Django Message Framework по умолчанию являются временными. Это значит, что они исчезают после отображения. Для демонстрации проверим, как это работает:
- Добавьте обработку сообщений в
create_task(мы это уже сделали в шаге 2). - Откройте страницу создания задачи, создайте задачу.
- Перейдите на другую страницу (например, список задач) — сообщение должно появиться.
- Обновите страницу — сообщения исчезнут.
Временные сообщения подойдут для редиректов, когда вы хотите уведомить пользователя только один раз после выполнения действия.
Шаг 6: финальное задание
Теперь, когда вы знаете, как настроить Django Message Framework, у нас есть задание для вас.
- Настройте Django Message Framework в вашем проекте, если вы этого ещё не сделали.
- Добавьте уведомления для следующих действий:
- Создание объекта (например, новый пост, новая задача, новый элемент).
- Редактирование объекта.
- Удаление объекта.
- Ошибки при выполнении действий (например, неправильные данные в форме).
- Стилизуйте сообщения, используя Bootstrap или другой CSS-фреймворк.
- Убедитесь, что вы используете временные сообщения, и протестируйте их поведение при редиректах.
Пункты проверки:
- Сообщения появляются при каждом из действий (CRUD).
- Сообщения исчезают после отображения (или перезагрузки страницы).
- Сообщения стилизованы для читабельности.
Теперь у вас есть возможность применить всё, что мы изучили, в своём проекте. Внимание к деталям, таким как уведомления, делает ваши приложения удобными для пользователя и даёт множество бонусов на собеседованиях!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ