message-消息

Web开发中有一个概念叫flash message,它用来设置一条信息,这条信息存储在Session或Cookie中,在当前会话下次HTTP请求的响应中返回这条信息给页面,这个功能一般用来输出表单错误信息等。Django中默认集成的message组件能够实现这个功能。

message组件配置

默认创建的工程中,已经为我们配置好message组件了,INSTALLED_APPS中,包含了django.contrib.messagesMIDDLEWARE中,包含了中间件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浏览器输出:

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。