当用户与平台进行交互时,用户可能希望告知他们操作的结果。Django有一个内置消息框架,允许你向用户显示一次性通知。
messages框架位于django.contrib.messages中,当你使用python manage.py startproject创建新项目时,它被包含在settings.py文件的默认INSTALLED_APPS列表中。
在项目的setting.py文件在中间件设置中包含一个名为django.contrib.messages.middleware.MessageMiddleware的中间件。
消息框架提供了一种向用户添加消息的简单方法。默认情况下,消息存储在cookie中(退回到会话存储),并在用户执行的下一个请求中显示它们。可以通过导入messages模块并使用简单的快捷方式添加新消息来在视图中使用消息框架,如下所示:
from django.contrib import messages
messages.error(request, 'Something went wrong')
通过使用add_message()方法或以下任何一种快捷方法创建新消息:
因为消息框架应用于项目,因此应该在基础模版为用户显示消息。
编辑base.html模版
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li class="{{ message.tags }}">
{{ message|safe }}
<a href="#" class="close">x</a>
</li>
{% endfor %}
</ul>
{% endif %}
messages框架包括上下文处理器django.contrib.messages.context_processors。在项目的TEMPLATES设置的context_processors列表中找到它。
将消息变量添加到请求上下文的消息。在模板中使用此变量向用户显示所有现有消息。
这里重构account应用,关于这个应用的更多内容,请查看
修改编辑视图以使用消息框架。
编辑account应用程序的views.py文件,导入消息
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)
# ...
当用户成功更新其配置文件时,添加一条成功消息。如果任何表单包含无效数据,将添加一条错误消息。
关于Django消息框架更多内容,可以查阅
消息框架 | Django 文档 | Django (djangoproject.com)