Использование messages framework
При работе с пользовательскими действиями может потребоваться информировать пользователей о результатах их действий. Джанго имеет встроенную платформу сообщений, которая позволяет отображать уведомления для пользователей. Платформа сообщений расположена на уровне django.contrib.messages и она включена в список INSTALLED_APPS по умолчанию. Обратите внимание на то, что в файле параметров содержится программное обеспечение по имени django.contrib.messages.middleware.MessageMiddleware в списке MIDDLEWARE_CLASSES . Платформа сообщений предоставляет простой способ добавления сообщений пользователям. Сообщения хранятся в базе данных и отображаются в следующем запросе пользователя. Можно использовать структуру сообщений в представлениях, импортируя модуль сообщений и добавляя новые сообщения с помощью простых комбинаций клавиш.
from django.contrib import messages
messages.error(request, 'Something went wrong')
Новые сообщения можно создавать с помощью метода add_message() или любого из следующих методов быстрого вызова:
- success() : Сообщения отображаемые после успешного выполнения действия
- info() : Информационные сообщения
- warning() : Предупреждения
- error() : Сообщения об ошибках
- debug() : Сообщения для отладки, которые будут удалены или пропущены в продакшн версии сайта
Поскольку платформа сообщений применяется глобально к проекту, мы можем отображать сообщения для пользователя в нашем базовом шаблоне. Откройте шаблон base.html и добавьте следующий код между<div>
с ID header и элементом<div>
с ID content:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li class="{{ message.tags }}">
{{ message|safe }}
<a href="#" class="close">✖</a>
</li>
{% endfor %}
</ul>
{% endif %}
Платформа сообщений включает обработчик контекста, который добавляет переменную messages в контекст запроса. Поэтому можно использовать эту переменную в шаблонах для отображения текущих сообщений пользователю.
Измените файл views.py приложения и создайте edit view:
from django.contrib import messages
@login_required
def edit(request):
if request.method == 'POST':
# ...
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(request, 'Profile updated successfully')
else:
messages.error(request, 'Error updating your profile')
else:
user_form = UserEditForm(instance=request.user)
# ...
При обновлении профиля пользователь получит сообщение об успешном выполнении. Если какая-либо из форм невалидна, то добавляется сообщение об ошибке.
Откройте в браузере http://127.0.0.1:8000/account/edit/ и отредактируйте свой профиль. После успешного обновления профиля вы увидите следующее сообщение:
Если же форма окажется невалидной, сообщение будет таким: