Django 2.1.7 使用内置messages显示通知消息

2024-08-21 04:08

本文主要是介绍Django 2.1.7 使用内置messages显示通知消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

在Web应用程序中,有时候需要在处理表单或其他类型的用户输入后向用户显示一次性通知消息(也称为“flash消息”),例如:用户注册成功、订单提交完成等信息。

为此,Django为匿名和经过身份验证的用户提供对基于cookie和session存储数据的消息传递框架。该消息框架允许将消息临时存储在一个请求中并检索它们以便在后续请求(通常是下一个请求)中显示。每个消息被标记以特定的level确定其优先级(例如,info, warning,或error)。

这个消息框架的数据传递方式基本就是我上一篇Django 2.1.7 redirect重定向数据传输的问题
中使用session的参数传递方式。

Django官网文档

https://docs.djangoproject.com/zh-hans/2.1/ref/contrib/messages/

在项目settings启用内置messages消息框架

  • django.contrib.messages需要安装在应用INSTALLED_APPS中,如下:
INSTALLED_APPS = (...'django.contrib.messages', # django 内置的消息传递应用
)
  • 中间件MIDDLEWARE需要包含 'django.contrib.sessions.middleware.SessionMiddleware''django.contrib.messages.middleware.MessageMiddleware'
MIDDLEWARE = (....'django.contrib.sessions.middleware.SessionMiddleware',....'django.contrib.messages.middleware.MessageMiddleware',...
)

默认存储后端依赖于session。这就是为什么SessionMiddleware 必须启用在MessageMiddleware的前面。

  • TEMPLATES设置包含'django.contrib.messages.context_processors.messages'
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', # 默认已有],},},
]

在视图和模板中使用消息

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.')

显示消息

get_messages

在模板中,读取消息示例如下:

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

如果在视图中使用上下文处理器,则应使用 RequestContext。确保messages可用于模板上下文。

即使您知道只有一条消息,您仍应迭代messages序列,否则将不会为下一个请求清除消息存储。

上下文处理器还提供了一个DEFAULT_MESSAGE_LEVELS变量,它是消息级别名称到其数值的映射:

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

在模板之外,可以使用 get_messages()来获取消息:

from django.contrib.messages import get_messagesstorage = get_messages(request)
for message in storage:do_something_with_the_message(message)

例如,您可以获取所有消息以在JSONResponseMixin中返回它们 而不是 TemplateResponseMixin。

get_messages() 将返回已配置的存储后端的实例。

消息使用示例

在视图A发出一个messages消息记录,然后在视图B显示一次消息内容。

1)编写视图A,添加两个消息

from django.contrib import messagesdef send_alert_msg(request):# 添加消息messages.add_message(request, messages.SUCCESS, 'successful msg!!')messages.add_message(request, messages.ERROR, 'error msg!!')return redirect('assetinfo:show_msg')

2)编写视图B,转发显示消息内容

def show_msg(request):return render(request,'alert_msg/show_msg.html')

模板内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{% if messages %}<ul class="messages">{% for message in messages %}<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>{% endfor %}</ul>{% endif %}<h4>通过tags判断messages类型</h4>{% if messages %}<ul class="messages">{% for message in messages %}{% if message.tags == "success" %}<li class="{{ message.tags }}">{{ message }}</li>{% elif message.tags == "error" %}<li class="{{ message.tags }}">{{ message }}</li>{% endif %}{% endfor %}</ul>{% endif %}</body>
</html>

3)在配置视图url

urlpatterns = [# ex:/assetinfo/send_alert_msgpath('send_alert_msg', views.send_alert_msg, name='send_alert_msg'),# ex:/assetinfo/show_msgpath('show_msg', views.show_msg, name='show_msg'),
]

4) 测试访问发送消息视图

在浏览器访问http://127.0.0.1:8000/assetinfo/send_alert_msg则自动重定向并显示消息如下:

13423234-d76be387d5062564.png

5) 直接再次访问接收消息视图

13423234-66bf67bb414bfa77.png

因为没有发送消息,所以消息接收为空。说明消息是一次性的,但是如果多次只发送不显示处理消息数据,则会在cookie或者session存储后端中堆积起来,在最后一次处理消息数据的时候一次性显示出来。

13423234-0e3934319aa622f6.png

这篇关于Django 2.1.7 使用内置messages显示通知消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092073

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount