您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在django中使用message消息框架,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
一、啟用消息框架
Django的messages消息框架的實現,依賴messages中間件和對應的context processor。
通過django-admin startproject xxx命令創建工程時,已經默認在settings.py中開啟了消息框架功能需要的所有的設置:
INSTALLED_APPS中注冊的'django.contrib.messages'。
MIDDLEWARE中添加'django.contrib.sessions.middleware.SessionMiddleware'和'django.contrib.messages.middleware.MessageMiddleware'。Django的messages框架默認使用的存儲后端為sessions。所以Session中間件必須被啟用,并出現在Message中間件之前。
TEMPLATES設置中的DjangoTemplates選項包含的'context_processors'配置項要包含'django.contrib.messages.context_processors.messages'。
二、配置消息引擎
通常我們使用默認的就好,可以跳過這節,但如果真有需要,也可以配置:
1. 存儲后端
Django提供了三種內置的消息存儲后端:
class storage.session.SessionStorage class storage.cookie.CookieStorage class storage.fallback.FallbackStorage
FallbackStorage是默認的存儲后端。如果它不適合你的需要,你可以通過設置MESSAGE_STORAGE選擇另外一個存儲后端,例如:
MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
2. 消息級別
消息框架的級別是可配置的,與Python的logging模塊類似
Django內置的message級別有下面幾種:
級別 | 說明 |
---|---|
DEBUG | 將在生產部署中忽略(或刪除)的與開發相關的消息 |
INFO | 普通提示信息 |
SUCCESS | 成功信息 |
WARNING | 警告信息 |
ERROR | 已經發生的錯誤信息 |
3. 消息樣式
通常,我們在前端HTML頁面中,希望給不同級別的消息,增加不同的CSS樣式,比如警告為黃色,error為紅色等等。
Django為我們提供了一個默認的樣式對應關系:
級別 | 樣式 |
---|---|
DEBUG | debug |
INFO | info |
SUCCESS | success |
WARNING | warning |
ERROR | error |
也就是說SUCCESS級別的消息,在前端會被賦予一個success樣式class。
若要修改消息級別的默認樣式,設置MESSAGE_TAGS,按如下例子所示:。
from django.contrib.messages import constants as messages MESSAGE_TAGS = { messages.INFO: '', 50: 'critical', }
三、使用消息框架
1. 添加消息
方法原型:add_message(request, level, message, extra_tags='', fail_silently=False)[source]
新增一條消息:
from django.contrib import messages messages.add_message(request, messages.INFO, 'Hello world.')
提供請求對象request(直接用就行),消息級別、消息內容字符串三個參數即可。
或者使用下面的快捷方式
messages.debug(request, '%s SQL statements were executed.' % count) messages.info(request, 'Three credits remain in your account.') messages.success(request, 'Profile details updated.') messages.warning(request, 'Your account expires in three days.') messages.error(request, 'Document deleted.')
2. 顯示消息
方法原型:get_messages(request)[source]
在你的模板文件中,像下面這樣使用:
{% if messages %} <ul class="messages"> {% for message in messages %} <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> {% endfor %} </ul> {% endif %}
相關說明:
通過if判斷是否有消息;
messages是一個列表,必須用for標簽循環它;
即使你知道只有一條消息,也要迭代messages列表,否則下個請求中,上個請求的消息不會被清除。
可以通過message.tags拿到每個消息的CSS樣式
有一個DEFAULT_MESSAGE_LEVELS變量,它映射消息級別的名稱到它們的數值:
{% if messages %} <ul class="messages"> {% for message in messages %} <li{% if message.tags %} class="{{ message.tags }}"{% endif %}> {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Important: {% endif %} {{ message }} </li> {% endfor %} </ul> {% endif %}
說明:
可以通過message.level拿到當前消息的級別數值;
將它與DEFAULT_MESSAGE_LEVELS.ERROR進行對比;
如果一樣,就說明當前消息級別為ERROR,需要顯示到頁面上。
在模板的外面,比如視圖中,可以使用get_messages()方法獲取消息:
from django.contrib.messages import get_messages storage = get_messages(request) for message in storage: do_something_with_the_message(message)
說明:
get_messages()返回的是存儲后端的一個實例。
循環這個實例,可以獲得每條消息
對于每一個消息實例,都包含下面的屬性,可以在模版或視圖中調用:
message: 消息的實際內容文本。不要使用message.message,直接message。
level: 消息級別,一個整數。
tags: 一個字符串,由該消息的所有標簽(extra_tags和tags)組合而成,組合時用空格分割開這些標簽。
extra_tags: 一個字符串,由該消息的定制標簽組合而成,并用空格分割。默認為空。
level_tag: 當前消息級別對應的CSS字符串,前面介紹過。
3. 自定義消息級別
消息級別只是一個整數常量,所以,可以定義自己的級別常量,例如:
CRITICAL = 50 def my_view(request): messages.add_message(request, CRITICAL, 'A serious error occurred.')
在自定義消息級別時,應小心避免覆蓋現有級別。內置級別的值為:
級別 | 對應整數值 |
---|---|
DEBUG | 10 |
INFO | 20 |
SUCCESS | 25 |
WARNING | 30 |
ERROR | 40 |
如果你需要在HTML或CSS中使用自定義級別,則需要通過MESSAGE_TAGS設置提供相應的映射關系。
4. 自定義每個請求的最小記錄級別
每個請求都可以通過set_level()方法設置最小記錄級別,如下所示:
from django.contrib import messages # 修改最小級別為DEBUG messages.set_level(request, messages.DEBUG) messages.debug(request, 'Test message...') # 在另外一個視圖中修改最小級別為WARNING messages.set_level(request, messages.WARNING) messages.success(request, 'Your profile was updated.') # 被忽略,不記錄 messages.warning(request, 'Your account is about to expire.') # 記錄 # 將最小級別恢復到默認值 messages.set_level(request, None) set_level()方法接收request為第一參數,消息級別為第二參數。
類似的,當前有效的記錄級別可以用get_level()方法獲取:
from django.contrib import messages current_level = messages.get_level(request)
5. 添加額外的消息CSS樣式
要添加自定義的消息CSS樣式,可以通過extra_tags參數:
messages.add_message(request, messages.INFO, 'Over 9000!', extra_tags='dragonball') messages.error(request, 'Email box full', extra_tags='email')
四、消息過期機制
默認情況下,如果包含消息的迭代器完成迭代后,當前請求中的消息都將被刪除。
如果你不想這么做,想保留這些消息,那么需要顯式的指定used參數為False,如下所示:
storage = messages.get_messages(request) for message in storage: do_something_with(message) storage.used = False
上述內容就是如何在django中使用message消息框架,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。