文章目录
- message组件
- 1 使用配置
- 2 设置值
- 3 读取值
- 4 源码分析
message组件
1 使用配置
INSTALLED_APPS = [
# 'django.contrib.admin',
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"web.apps.WebConfig"
]
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'
]
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_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
# MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
2 设置值
在前页面视图中设置值
from django.contrib import messages
messages.add_message(reqeust, messages.SUCCESS, "删除成功1")
messages.add_message(reqeust, messages.ERROR, "操作失败")
3 读取值
在后页面视图中读取值(读取值的同时,将值替换为本页面的message值,如果没有没有就为空列表)
-
python代码中读取
from django.contrib.messages.api 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>
4 源码分析
message是一个对象(包裹)。
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一起进步吧!!!