一.简介

  在网页应用中,你经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户

对于这个功能,Django 提供基于Cookie 和会话的消息,无论是匿名用户还是认证的用户。

error

二.启用消息框架 

消息框架的实现通过一个中间件 类和对应的context processor。

settings.py  已经包含启用消息框架功能需要的所有的设置:

  • 'django.contrib.messages'

  • 'django.contrib.messages.middleware.MessageMiddleware'

    MessageMiddleware 之前。

  • 'django.contrib.messages.context_processors.messages'

messages context processo

2.1 配置消息框架引擎

  

消息框架可以使用不同的后台存储临时消息。

django.contrib.messages 中提供三个内建的存储类:


contrib.sessions 应用。


如果Cookie 数据的大小将超过2048 字节,将丢弃旧的消息。


contrib.sessions 应用。

在通常情况下,它提供的性能应该是最好的。

MESSAGE_STORAGE 为它的完整导入路径选择另外一个存储类,例如:

MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'

3.3 消息级别

  消息的级别可以让你根据类型进行分组,这样它们能够在不同的视图和模板中过滤或显示出来

django.contrib.messages 导入的内建级别有:

Constant Purpose
DEBUG Development-related messages that will be ignored (or removed) in a production deployment
INFO Informational messages for the user
SUCCESS An action was successful, e.g. “Your profile was updated successfully”
WARNING A failure did not occur but may be imminent
ERROR An action was not successful or some other failure occurred

小于这个级别的消息将被忽略。

若要修改消息级别的默认标签,设置MESSAGE_TAGS为包含你想要修改的级别的字典

from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
    messages.INFO: '',
    50: 'critical',
}

3.3 在视图及模板中使用

add_message(request, level, message, extra_tags='', fail_silently=False)

例 

新增消息

from django.contrib import messages
messages.add_message(request, messages.INFO, 'Hello world.')

有几个快捷方法提供标准的方式来新增消息并带有常见的标签(这些标签通常表示消息的HTML 类型)

messages.debug(request, '%s SQL statements were executed.' % count)
messages.info(request, 'Three credits remain in your account.')
messages.success(request, 'Profile details updated.')
messages.warning(request, 'Your account expires in three days.')
messages.error(request, 'Document deleted.')

3.4 显示消息

get_messages(request)

在你的模板中,像下面这样使用:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

三.配置使用

  以上只是简单举例使用,看更详细文档请参考 https://docs.djangoproject.com/en/1.10/ref/contrib/messages/

  在生产使用中我们可以把它整合成一个模块便于调用,结合前端显示当有错误或者其它信息时浏览器可以alert消息

from django.contrib.messages import constants as message_constants

MESSAGE_LEVEL = message_constants.INFO



TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
settings

相关文章:

  • 2021-11-01
猜你喜欢
  • 2021-06-30
  • 2022-12-23
  • 2021-04-29
  • 2021-11-14
  • 2021-10-06
相关资源
相似解决方案