Django进阶 messages框架

在 web 应用程序中,通常需要在处理表单或其他类型的用户输入之后,向用户显示一个通知消息(也称为 flash message)。对于这个功能,Django 提供基于 Cookie 和会话的消息,无论是匿名用户还是认证的用户。消息框架允许临时将消息存储在请求中,并在下一个请求中提取它们并显示。每个消息都带有一个特定 level 标签,表示其优先级。

启用消息框架

消息框架的实现通过一个中间件类和对应的上下文处理器。django-admin startproject 命令创建的默认 settings.py 已经包含启用消息框架功能需要的所有的设置:

INSTALLED_APPS

  • django.contrib.messages

MIDDLEWARE

  • django.contrib.sessions.middleware.SessionMiddleware
  • django.contrib.messages.middleware.MessageMiddleware

默认的后端存储依赖 sessions。所以中间件中必须启用 SessionMiddleware 并出现在 MessageMiddleware 之前。

TEMPLATES

  • context_processors 选项包含 django.contrib.messages.context_processors.messages

配置消息引擎

1. 存储后端

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

Django 在 django.contrib.messages 中提供了三个内置的存储类:

(1)class storage.session.SessionStorage

该类存储请求会话中的所有消息。因此它需要启用 django.contrib.sessions 应用。

(2)class storage.cookie.CookieStorage

该类将消息数据存储在 cookie 中,以便在请求之间持久化通知。如果 cookie 数据大小超过 2048 字节,则删除旧消息。

(3)class storage.fallback.FallbackStorage

FallbackStorage 是默认的存储类。这个类首先使用 CookieStorage,然后使用 SessionStorage 来存储不能放入单个 cookie 的消息。

这种行为尽量避免向会话写入内容。在一般情况下提供最好的性能。

2. 消息等级

消息框架可配置消息级别。消息级别按类型对消息进行分组,以便在视图和模板中以不同的方式过滤或显示消息。

django.contrib.messages 内置消息级别:DEBUG,INFO,SUCCESS,WARNING,ERROR。

MESSAGE_LEVEL 设置可以用来改变记录的最小级别(还可以在每个请求中修改),小于这个级别的消息将被忽略。

消息标签

消息标签是消息级别的字符串表示形式,加上直接在视图中添加的任何额外标记。标记存储在字符串中,并由空格分隔。通常,消息标记被用作 CSS 类,以根据消息类型定制消息样式。

默认情况下,每个消息级别都有一个消息标签(messages.tags):debug,info,success,warning,error。

Constant Level Tag Purpose
DEBUG 10 debug 与开发相关的消息
INFO 20 info 为用户提供的消息
SUCCESS 25 success 操作成功的消息
WARNING 30 warning 未失败的告警消息
ERROR 40 error 操作失败的消息

在视图和模板中使用消息

添加消息

要添加消息,使用 message.add_message() 方法:

1 from django.contrib import messages
2
3 messages.add_message(request, level, message, extra_tags=‘‘, fail_silently=False)

一些快捷方式提供了一种标准的方式来添加带有常用标记的消息(通常表示为消息的HTML类):

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

显示消息

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

即使只有一条消息,仍然应该遍历消息序列,否则消息存储将不会为下一个请求清除。

原文地址:https://www.cnblogs.com/yutb/p/10715967.html

时间: 2024-10-27 09:49:48

Django进阶 messages框架的相关文章

Django进阶-ORM框架

对应关系 ORM能做的事 操作数据表 --> 创建表/删除表/修改表 操作数据行 --> 数据的增删改查 注意: 不能创建数据库 使用Django中的ORM连接MySQL 配置 1, 先自己建库 2, 在settings.py里面配置一下数据库的连接信息(告诉Django连接哪一个数据库) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day62', 'HOST': '127.0.0.1',

Django进阶-ORM框架的一般操作

必知必会 返回QuerySet对象 1 .all() # 所有 2 .filter() # 符合条件的 3 .exclude() # 排除符合条件的 4 .values() # 取出相应的字段值(不写字段,取出所有), 可以连表取值 --> 字典格式{} 5 .values_list() # 取出相应的字段值(不写字段,取出所有), 可以连表取值 --> 元祖格式() 6 .order_by() # 对查询结果排序 7 .reverse() # 对查询结果反向排序, 只能在已定义顺序的Quer

python 全栈 web框架 Django进阶

django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然基础已经了解,那就聊聊主流的东西. 一.web框架重新认知: 既然都是框架,那肯定是都包含了这些模块和对应的功能!但是不同框架之间也是有些诧异,毕竟封装的方法不同. Django: - 路由(url路由系统) - 视图(视图函数) - 模板(模版页面) - 数据库 ---> ORM(类-表:对象-行

Django messages框架

一.简介 在网页应用中,你经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户 对于这个功能,Django 提供基于Cookie 和会话的消息,无论是匿名用户还是认证的用户. 其消息框架允许你临时将消息存储在请求中,并在接下来的请求(通常就是下一个请求)中提取它们并显示.每个消息都带有一个特定level 标签,表示其优先级(例如info.warning 或error) 二.启用消息框架 消息框架的实现通过一个中间件 类和对应的context

【Python之路Day18】Python Web框架之 Django 进阶操作

Django 进阶篇 一.django的Model基本操作和增.删.改.查. 注:默认使用了sqlite3数据库 如果想使用其他数据库,请在settings里修改 1.创建数据库: 1.创建model类 在app01(或者你的app下)下models.py写入以下内容: from django.db import models # Create your models here. # 这个类是用来生成数据库表的,这个类必须集成models.Model class UserInfo(models.

Django进阶 (二)

规范 确立规范的好处: 代码可读性高 方便代码的定位极其查找 为以后代码扩容带来便利 场景: 在多个APP的场景下,单个app的URL函数功能较多的时候,我们可以通过以下方法来解决. 把Views写成模块的方式并且为不同的功能进行不同的划分,并且在Templates中使用同样规则,如下图: 我根据不同的html然后创建不同的函数,命名和templates模板目录一样这样非常方便找到,这个页面中的函数在哪里. 设置路由的时候就得导入相应的函数(下面的函数是在app01中的url,通过object的

Python之路【第十七篇】Django进阶篇

规范 确立规范的好处: 代码可读性高 方便代码的定位极其查找 为以后代码扩容带来便利 场景: 在多个APP的场景下,单个app的URL函数功能较多的时候,我们可以通过以下方法来解决. 把Views写成模块的方式并且为不同的功能进行不同的划分,并且在Templates中使用同样规则,如下图: 我根据不同的html然后创建不同的函数,命名和templates模板目录一样这样非常方便找到,这个页面中的函数在哪里. 设置路由的时候就得导入相应的函数(下面的函数是在app01中的url,通过object的

Python之路【第十六篇续】Django进阶篇

Django请求生命周期 首先:对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端 路由系统 在Django的urls中我们可以根据一个URL对应一个函数名来定义路由规则如下: from cmdb import views urlpatterns = [ url(r'^login/$', views.login), url(r'^index/$', views.index), url(r'^lists/$', views.lists), url(r'^add/$'

python--第十八天总结(Django进阶)

一.路由系统 1.每个路由规则对应一个view中的函数 1 2 3 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage), url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), 2.根据app对路由规则进行一次分类 1 url(r'^web/',include('web.urls')),