message-消息
Web开发中有一个概念叫flash message,它用来设置一条信息,这条信息存储在Session或Cookie中,在当前会话下次HTTP请求的响应中返回这条信息给页面,这个功能一般用来输出表单错误信息等。Django中默认集成的message组件能够实现这个功能。
message组件配置
默认创建的工程中,已经为我们配置好message组件了,INSTALLED_APPS中,包含了django.contrib.messages。MIDDLEWARE中,包含了中间件django.contrib.messages.middleware.MessageMiddleware,此外,模板context_processors配置中django.contrib.messages.context_processors.messages,它能让我们在模板中直接访问消息。
除此之外,还有一个MESSAGE_STORAGE的可选配置,默认值是django.contrib.messages.storage.fallback.FallbackStorage,它配置了消息的存储位置,默认情况是存储消息时优先使用Cookie,其次尝试Session,我们一般不需要改动这个配置。
例子
下面代码中,我们编写这样一个测试功能:首先访问/add_msg添加一条消息,然后访问/show_msg回显这条消息,再次访问/show_msg因为消息已经被消费掉,应该没有任何显示。
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib import messages
def add_msg(request):
messages.info(request, '测试消息')
return HttpResponse('OK')
def show_msg(request):
return render(request, 'msg.html')
上面代码中,我们调用messages.info设置了消息,其中,info()生成了INFO级别的消息,Django中消息和日志错误级别类似,也有一个消息级别,分别是:
- DEBUG
- INFO
- SUCCESS
- WARNING
- ERROR
页面模板代码如下。
{% if messages %}
{% for message in messages %}
{{ message.tags }} | {{ message }}
{% endfor %}
{% endif %}
在页面模板中,我们可以直接通过messages变量访问消息,我们遍历消息变量,其中message.tags可以获得消息级别,message可以获得消息内容。
第一次访问/show_msg浏览器输出:
