源碼分析Django的message組件
Django的Message組件(源碼分析)
1. 配置
# MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage' # MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
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',
],
},
},
]2. 設置值
from django.contrib import messages messages.add_message(reqeust, messages.SUCCESS, "刪除成功1") messages.add_message(reqeust, messages.ERROR, "操作失敗")
3. 讀取值
- 第一種: 視圖中讀取
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. 源碼分析
4.1第一步: 設置值
from django.contrib import messages messages.add_message(reqeust, messages.SUCCESS, "刪除成功1")
我們根據(jù)django的生命周期, 從Middleware入手,
- process_request: 將SessionStorage對象封裝到request的_message(咱們的案例里面也有將用戶信息封裝到request中, 這樣在中間件中添加方便后期調(diào)用)
- process_response: 將message對象反序列化后儲存到session/Cookie中

4.2 第二步: 讀取值
- process_request: 通過循環(huán)讀取message內(nèi)容
- process_response: 從session中刪除message值

【設置】中間件process_request加載
【設置】在視圖函數(shù)中往message中寫入值(內(nèi)存)
【設置】中間件process_response,將內(nèi)存中新增的數(shù)據(jù)寫入到數(shù)據(jù)源
【新頁面】中間件process_request加載
【新頁面】在視圖函數(shù)或模板中讀取message中的信息(老的數(shù)據(jù)源加載的+新增的)
- 【設置】中間件process_response
used = True,則只保存新增部分。 added_new = True,老的數(shù)據(jù)源加載的+新增的都重新保存到數(shù)據(jù)源。
到此這篇關于源碼分析Django的message組件的文章就介紹到這了,更多相關Django message組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在網(wǎng)頁里看flash的trace數(shù)據(jù)的js類
我的js類jdhcn.js中的一個flashDebug方法2009-01-01
JavaScript基礎進階之數(shù)組方法總結(推薦)
下面小編就為大家?guī)硪黄狫avaScript基礎進階之數(shù)組方法總結(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
JavaScript必知必會(六) delete in instanceof
這篇文章主要介紹了JavaScript必知必會(六) delete in instanceof的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-06-06
JavaScript懶加載與預加載原理與實現(xiàn)詳解
這篇文章主要介紹了JavaScript懶加載與預加載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-09-09
Javascript中判斷變量是數(shù)組還是對象(array還是object)
怎樣判斷一個JavaScript變量是array還是obiect,或許有很多初學者對此不是很清楚吧,下面為大家詳細解答下,希望對大家有所幫助2013-08-08
ionic2屏幕適配實現(xiàn)適配手機、平板等設備的示例代碼
本篇文章主要介紹了ionic2屏幕適配實現(xiàn)適配手機、平板等設備的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-08-08
JavaScript利用img實現(xiàn)前端頁面埋點功能
做數(shù)據(jù)分析的時候需要獲取足量的有效數(shù)據(jù),這個時候就需要我們在前端頁面埋點。如何來實現(xiàn)一個前端埋點功能,本文就帶你上手試試2022-06-06
微信小程序?qū)崿F(xiàn)獲取用戶信息替換用戶名和頭像到首頁
本文詳細講解了微信小程序?qū)崿F(xiàn)獲取用戶信息替換用戶名和頭像到首頁的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
echarts折線圖流動特效的實現(xiàn)全過程(非平滑曲線)
最近因為公司業(yè)務需求,需要實現(xiàn),當Echarts重新加載數(shù)據(jù)時實現(xiàn)動態(tài)效果,下面這篇文章主要給大家介紹了關于echarts折線圖流動特效實現(xiàn)的相關資料,需要的朋友可以參考下2023-03-03

