Django提供了基于 Cookie 或者 Session 的消息框架 Message,不管是匿名用户还是认证的用户,这个消息框架允许临时将消息存储在 Request请求中,并在接下来的请求(通常就是下一个请求)中提取并显示或者进行应用处理。每个消息都带有一个特定的 level 等级标签,表示其优先级(例如 info 、 warning 或 error)。
Django 从一开始就带有一个称为 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 %}
{% endif %}
{% endfor %}
设置可以用来改变记录的最小级别,小于这个级别的消息将被忽略
MESSAGE_LEVEL = messages.INFO
views.py 内置方法可以直接导入
from django.contrib.messages import constants as message_constants
MESSAGE_LEVEL = message_constants.DEBUG
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',
这将消息级别映射到消息标记,该标记通常在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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号