Django 4.x Message 消息使用示例和配置方法

Django提供了基于 Cookie 或者 Session 的消息框架 Message,不管是匿名用户还是认证的用户,这个消息框架允许临时将消息存储在 Request请求中,并在接下来的请求(通常就是下一个请求)中提取并显示或者进行应用处理。每个消息都带有一个特定的 level 等级标签,表示其优先级(例如 info 、 warning 或 error)。

Django 从一开始就带有一个称为 Message 消息框架的功能。


Message 配置

settings.py 中默认进行配置。

INSTALLED_APPS = [
    ......
    'django.contrib.messages',
    ......
]

应用调试

views.py 添加消息,直接使用message的add_messages方法

from django.contrib import messages
add_message(request, level, message, extra_tags='', fail_silently=False) 
# 不启用消息fail_silent =True
messages.add_message(request, messages.INFO, 'Hello')

# 快捷方式添加
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.')

前端调用 *.html

{% if messages %}
    {% for message in messages %} {{ message }} {% endfor %}
{% endif %}



Message 参数说明

MESSAGE_LEVEL

设置可以用来改变记录的最小级别,小于这个级别的消息将被忽略

MESSAGE_LEVEL = messages.INFO

views.py 内置方法可以直接导入

from django.contrib.messages import constants as message_constants
MESSAGE_LEVEL = message_constants.DEBUG

MESSAGE_STORAGE

MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'

Django 提供了三种内置的消息存储后端:

存储请求会话中的所有消息。

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage',

该类将消息数据存储在cookie中(使用秘密散列签名以防止操作),以便在请求之间持久化通知。如果cookie数据大小超过2048字节,则删除旧消息。

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

首先使用 CookieStorage,然后返回到使用 SessionStorage 来存储不能放入单个cookie的消息,还需要Django的contrib.sessions的应用程序。

MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage',

MESSAGE_TAGS

这将消息级别映射到消息标记,该标记通常在HTML中呈现为CSS类。

MESSAGE_TAGS = {
    # 级别:样式
    messages.DEBUG: 'debug', # 级别:10 将在生产部署中忽略(或删除)的与开发相关的消息
    messages.INFO: 'info', # 级别:20 普通提示信息
    messages.SUCCESS: 'success', # 级别:25成功信息
    messages.WARNING: 'warning', # 级别:30警告信息
    messages.ERROR: 'error', # 级别:40 已经发生的错误信息
}

from django.contrib.messages import constants as message_constants
MESSAGE_TAGS = {message_constants.INFO: ''}

views.py 创建自定义消息级别。

from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
    messages.INFO: '',
    50: 'critical',  # 自定义级别:样式
}

常用项目配置

settings.py 项目配置

INSTALLED_APPS = [
    ......
    'django.contrib.messages',
]

MIDDLEWARE = [
    ......
    'django.contrib.sessions.middleware.SessionMiddleware', # 必须启用
]

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',
                'django.template.context_processors.media', 
            ],
            'libraries': 
                'staticfiles': 'django.templatetags.static',
            }
        },
    },
]

views.py get_messages(request) 获取请求消息。

from django.contrib.messages import get_messages

storage = get_messages(request)
for message in storage:
    do_something_with_the_message(message)


# 自定义消息级别
# 在MESSAGE_TAGS中的级别不可冲突
CRITICAL = 50

def my_view(request):
    messages.add_message(request, CRITICAL, '发生严重错误。')

# 设置最小级别 set_level()
from django.contrib import messages

# 修改最小级别为DEBUG
messages.set_level(request, messages.DEBUG)
messages.debug(request, 'Test message...')

# 在另外一个视图中修改最小级别为WARNING
messages.set_level(request, messages.WARNING)
messages.success(request, 'Your profile was updated.') # 被忽略,不记录
messages.warning(request, 'Your account is about to expire.') # 记录

# 将最小级别恢复到默认值
messages.set_level(request, None)

# 获取消息级别
from django.contrib import messages
current_level = messages.get_level(request)

# 添加额外的消息标签
messages.add_message(request, messages.INFO, 'Over 9000!', extra_tags='dragonball')
messages.error(request, 'Email box full', extra_tags='email')

前端调用 *.html

{% if messages %}
    {% for message in messages %}
        {% if message.level == DEFAULT_MESSAGE_LEVELS.INFO %}
            
                
                【信息】:{{ message }}
            
        {% endif %}

        {% if message.level == DEFAULT_MESSAGE_LEVELS.SUCCESS %}
            
                
                【成功】:{{ message }}
            
        {% endif %}

        {% if message.level == DEFAULT_MESSAGE_LEVELS.WARNING %}
            
                
                【警告】:{{ message }}
            
        {% endif %}

        {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}
            
                
                【错误】:{{ message }}
            
        {% endif %}
    {% endfor %}
{% endif %}


展开阅读全文

页面更新:2024-03-20

标签:消息   示例   样式   标记   框架   最小   级别   错误   发生   标签   方法   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top