django中的MESSAGE组件

文章目录

    • message组件
      • [1 使用配置](#1 使用配置)
      • [2 设置值](#2 设置值)
      • [3 读取值](#3 读取值)
      • [4 源码分析](#4 源码分析)

message组件

1 使用配置

python 复制代码
INSTALLED_APPS = [
    # 'django.contrib.admin',
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "web.apps.WebConfig"
]
python 复制代码
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    # 'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'utils.md.AuthMiddleware'
]
python 复制代码
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',
            ],
        },
    },
]
python 复制代码
# MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
# MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'

2 设置值

在前页面视图中设置值

python 复制代码
from django.contrib import messages
messages.add_message(reqeust, messages.SUCCESS, "删除成功1")
messages.add_message(reqeust, messages.ERROR, "操作失败")

3 读取值

在后页面视图中读取值(读取值的同时,将值替换为本页面的message值,如果没有没有就为空列表)

  1. python代码中读取

    python 复制代码
    from django.contrib.messages.api import get_messages
    messages = get_messages(request)
    for msg in messages:
        print(msg)
  2. 前端模板代码中读取

    html 复制代码
    <ul>
        {% for message in messages %}
    	    <li>{{ message.tags }} {{ message }}</li>
        {% endfor %}
    </ul>

4 源码分析

message是一个对象(包裹)。

python 复制代码
from django.contrib import messages
messages.add_message(reqeust, messages.ERROR, "删除成功1")
messages.add_message(reqeust, messages.SUCCESS, "删除成功2", extra_tags="哈哈哈")

第一次访问

后一次访问

  • 【设置】中间件process_request加载,创建一个MESSAGE对象的实例(settings中配置的MESSAGE_STORAGE不同创建不同实例)

  • 【设置】在视图函数中往message中写入值(此时数据保存在内存中的列表中)

  • 【设置】中间件process_response,将内存中新增的数据写入到数据源(cookie或者session)

  • 【新页面】中间件process_request加载(创建一个新的MESSAGE对象)

  • 【新页面】在视图函数或模板中读取message中的信息(老的数据源加载的+新增的)

  • 【设置】中间件process_response

    复制代码
    used = True,则只保存新增部分。
    added_new = True,老的数据源加载的+新增的都重新保存到数据源。

若有错误与不足请指出,关注DPT一起进步吧!!!

相关推荐
前方一片光明5 小时前
SQL SERVER——生成sql:删除所有log表中,user_name是某用户的数据
数据库·sql·oracle
Gauss松鼠会6 小时前
【GaussDB】在duckdb中查询GaussDB的数据
数据库·sql·database·gaussdb
虹科网络安全6 小时前
艾体宝洞察 | Redis vs ElastiCache:哪个更具成本效益?
数据库·redis·缓存
自在极意功。6 小时前
MyBatis 动态 SQL 详解:从基础到进阶实战
java·数据库·mybatis·动态sql
老邓计算机毕设6 小时前
SSM校园订餐系统7z0dm(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·菜品管理系统·ssm 框架·ssm 框架开发·校园线上订餐平台
sxlishaobin6 小时前
MySQL- explain
数据库·mysql
曹牧7 小时前
Oracle:判断一个字符串出现次数
数据库·oracle
源代码•宸7 小时前
Leetcode—620. 有趣的电影&&Q3. 有趣的电影【简单】
数据库·后端·mysql·算法·leetcode·职场和发展
快乐肚皮7 小时前
MySQL递归CTE
java·数据库·mysql·递归表达式
2301_800256117 小时前
地理空间数据库中的CPU 和 I/O 开销
数据库·算法·oracle