首页 > 其他分享 >8.django-message组件

8.django-message组件

时间:2022-11-17 10:59:29浏览次数:50  
标签:存储 messages django contrib 组件 message 数据

message组件可以某次请求的某些数据暂存起来,当后面请求需要的时候可以再次使用,同时删除这些存起来的数据

相对于cookie,message将数据存在server端,在需要使用的时候,再将数据拿走

 

 

 

1.配置

message组件是Django内置的功能,只要在配置文件中设置如下Django默认是开启message组件的

  • 注册message应用

    INSTALLED_APPS = [
            ...
        'django.contrib.messages',
    ]
  • 使用中间件
    MIDDLEWARE = [
        ...
        'django.contrib.messages.middleware.MessageMiddleware',
            ...
    ]
  • 模板设置
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            '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',
                ],
            },
        },
    ]
  • message存储形式
    # 将数据存储在session和cookie中
    # MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'  
    # 将数据存储在cookie中
    # MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
    # 将数据存储在session中
    MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'

     

2.python代码操作

  • 添加值
    from django.contrib import messages
        message = messages.add_message(request, messages.SUCCESS, '添加数据1', '额外数据1')
        message = messages.add_message(request, messages.SUCCESS, '添加数据2', '额外数据2')

     

  • 读取值
    • 视图中获取数据

      from django.contrib.messages import get_messages
      messages = get_messages(request)
      for msg in messages:
          print(msg)
    • 模板中获取数据
      <ul>
          {% for message in messages %}
              <li>{{ message.tags }} {{ message }}</li>
          {% endfor %}
      </ul>

       

3.源码分析

 

 

 

 

  • 在中间件request中初始化一个存储对象,存储对象可以根据配置文件中的MESSAGE_STORAGE进行设置

  • 在视图函数中添加数据,将数据封装在存储对象中

  • 在中间件的response中,将存储对象中的数据保存到内存中

  • 当在视图或者模板文件中遍历存储对象的时候,就会设置used标志

  • 在中间件的response中,将使用的数据从内存中清除

标签:存储,messages,django,contrib,组件,message,数据
From: https://www.cnblogs.com/victor1234/p/16898632.html

相关文章

  • vue 使用ant design vue组件实现表格操作
    vue使用antdesignvue组件实现点击表格数据弹窗写在columns数组的对象里面customRender:(text,record,index)=>{if(index===this.list.length-1)......
  • Vue 中组件的使用
    一、局部组件的使用。渲染组件-父使用子组件。1、声子:创建子组件(对象)。//局部组件:声子挂子用子varVheader={template:`......
  • 问题记录-前端开发避坑(7)--vue 原生h5开发及基础组件开发
    问题1问题描述与分析执行vueRouter的编程式导航时,报错:vuerouterTypeError:onCompleteisnotafunction检查发现是参数格式不对。这里使用了对象语法,而我错把qu......
  • 12.Seata:Spring Cloud Alibaba分布式事务组件(非常详细)
    随着业务的不断发展,单体架构已经无法满足我们的需求,分布式微服务架构逐渐成为大型互联网平台的首选,但所有使用分布式微服务架构的应用都必须面临一个十分棘手的问题,那就是......
  • Django Celery RabbitMQ访问被拒绝(403) ACCESS_REFUSED
    报错代码:(403)ACCESS_REFUSED-LoginwasrefusedusingauthenticationmechanismPLAI(省略) 解决方案:    在rabbitmq中注册用户具体代码实现:列出用户rabbitm......
  • 4.django-模板
    在django中,模板引擎(DTL)是一种可以让开发者将服务端数据填充到html页面中的完成渲染的技术模板引擎的原理分为以下三步:在项目配置文件中指定保存模板文件的的模板目录,一......
  • 3.django-视图
    django的视图主要有两种,分别是函数视图和类视图,也就是FBV和CBV,先学习FBV1.请求方式常见的请求方式如下GET:获取数据POST:添加数据DELETE:删除数据PUT:更新数据PATCH局......
  • uniapp全局组件的使用
      第一步:在项目文件的根目录上添加一个components文件夹       我这里.配置的是全局的颜色 第二步:在需要用的组件上使用    注意:1.在使用全......
  • 1.django简介及安装
    1.简介web应用程序的本质接收并解析HTTP请求处理本次请求,完成业务上的处理构造并返回响应HTTP响应   什么是web框架呢?web框架用于搭建web应用程序,免......
  • Vue3的setup在el-tab中动态加载组件
    公司某项目需求在页面显示的组件是根据角色变化而变化的,在这个项目中我使用了elementplus的el-tabs来动态的显示这些组件,如下图所示数据内容大概是这样的在未使用setup......