最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django 消息框架 message使用詳解

 更新時間:2019年07月22日 15:49:58   作者:NAVYSUMMER  
這篇文章主要介紹了django 消息框架 message使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

在網(wǎng)頁應(yīng)用中,我們經(jīng)常需要在處理完表單或其它類型的用戶輸入后,顯示一個通知信息給用戶。

對于這個需求,Django提供了基于Cookie或者會話的消息框架messages,無論是匿名用戶還是認(rèn)證的用戶。這個消息框架允許你臨時將消息存儲在請求中,并在接下來的請求(通常就是下一個請求)中提取它們并顯示。每個消息都帶有一個特定的level標(biāo)簽,表示其優(yōu)先級(例如info、 warning或error)。

一、啟用消息框架

Django的messages消息框架的實現(xiàn),依賴messages中間件和對應(yīng)的context processor。

通過django-admin startproject xxx命令創(chuàng)建工程時,已經(jīng)默認(rèn)在settings.py中開啟了消息框架功能需要的所有的設(shè)置:

  • INSTALLED_APPS中注冊的'django.contrib.messages'。
  • MIDDLEWARE中添加'django.contrib.sessions.middleware.SessionMiddleware'和'django.contrib.messages.middleware.MessageMiddleware'。Django的messages框架默認(rèn)使用的存儲后端為sessions。所以Session中間件必須被啟用,并出現(xiàn)在Message中間件之前。
  • TEMPLATES設(shè)置中的DjangoTemplates選項包含的'context_processors'配置項要包含'django.contrib.messages.context_processors.messages'。

二、配置消息引擎

通常我們使用默認(rèn)的就好,可以跳過這節(jié),但如果真有需要,也可以配置:

1. 存儲后端

Django提供了三種內(nèi)置的消息存儲后端:

class storage.session.SessionStorage class storage.cookie.CookieStorage class storage.fallback.FallbackStorage

FallbackStorage是默認(rèn)的存儲后端。如果它不適合你的需要,你可以通過設(shè)置MESSAGE_STORAGE選擇另外一個存儲后端,例如:

MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'

2. 消息級別

消息框架的級別是可配置的,與Python的logging模塊類似

Django內(nèi)置的message級別有下面幾種:

級別 說明
DEBUG 將在生產(chǎn)部署中忽略(或刪除)的與開發(fā)相關(guān)的消息
INFO 普通提示信息
SUCCESS 成功信息
WARNING 警告信息
ERROR 已經(jīng)發(fā)生的錯誤信息

3. 消息樣式

通常,我們在前端HTML頁面中,希望給不同級別的消息,增加不同的CSS樣式,比如警告為黃色,error為紅色等等。

Django為我們提供了一個默認(rèn)的樣式對應(yīng)關(guān)系:

級別 樣式
DEBUG debug
INFO info
SUCCESS success
WARNING warning
ERROR error

也就是說SUCCESS級別的消息,在前端會被賦予一個success樣式class。

若要修改消息級別的默認(rèn)樣式,設(shè)置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(直接用就行),消息級別、消息內(nèi)容字符串三個參數(shù)即可。

或者使用下面的快捷方式

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 %}

相關(guān)說明:

  • 通過if判斷是否有消息;
  • messages是一個列表,必須用for標(biāo)簽循環(huán)它;
  • 即使你知道只有一條消息,也要迭代messages列表,否則下個請求中,上個請求的消息不會被清除。
  • 可以通過message.tags拿到每個消息的CSS樣式

有一個DEFAULT_MESSAGE_LEVELS變量,它映射消息級別的名稱到它們的數(shù)值:

{% 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拿到當(dāng)前消息的級別數(shù)值;
  • 將它與DEFAULT_MESSAGE_LEVELS.ERROR進(jìn)行對比;
  • 如果一樣,就說明當(dāng)前消息級別為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()返回的是存儲后端的一個實例。
  • 循環(huán)這個實例,可以獲得每條消息

對于每一個消息實例,都包含下面的屬性,可以在模版或視圖中調(diào)用:

  • message: 消息的實際內(nèi)容文本。不要使用message.message,直接message。
  • level: 消息級別,一個整數(shù)。
  • tags: 一個字符串,由該消息的所有標(biāo)簽(extra_tags和tags)組合而成,組合時用空格分割開這些標(biāo)簽。
  • extra_tags: 一個字符串,由該消息的定制標(biāo)簽組合而成,并用空格分割。默認(rèn)為空。
  • level_tag: 當(dāng)前消息級別對應(yīng)的CSS字符串,前面介紹過。

3. 自定義消息級別

消息級別只是一個整數(shù)常量,所以,可以定義自己的級別常量,例如:

CRITICAL = 50

def my_view(request):
  messages.add_message(request, CRITICAL, 'A serious error occurred.')

在自定義消息級別時,應(yīng)小心避免覆蓋現(xiàn)有級別。內(nèi)置級別的值為:

級別 對應(yīng)整數(shù)值
DEBUG 10
INFO 20
SUCCESS 25
WARNING 30
ERROR 40

如果你需要在HTML或CSS中使用自定義級別,則需要通過MESSAGE_TAGS設(shè)置提供相應(yīng)的映射關(guān)系。

4. 自定義每個請求的最小記錄級別

每個請求都可以通過set_level()方法設(shè)置最小記錄級別,如下所示:

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.') # 記錄

# 將最小級別恢復(fù)到默認(rèn)值
messages.set_level(request, None)
set_level()方法接收request為第一參數(shù),消息級別為第二參數(shù)。

類似的,當(dāng)前有效的記錄級別可以用get_level()方法獲取:

from django.contrib import messages
current_level = messages.get_level(request)

5. 添加額外的消息CSS樣式

要添加自定義的消息CSS樣式,可以通過extra_tags參數(shù):

messages.add_message(request, messages.INFO, 'Over 9000!', extra_tags='dragonball')
messages.error(request, 'Email box full', extra_tags='email')

四、消息過期機制

默認(rèn)情況下,如果包含消息的迭代器完成迭代后,當(dāng)前請求中的消息都將被刪除。

如果你不想這么做,想保留這些消息,那么需要顯式的指定used參數(shù)為False,如下所示:

storage = messages.get_messages(request)
for message in storage:
  do_something_with(message)
storage.used = False

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python bluetooth藍(lán)牙信息獲取藍(lán)牙設(shè)備類型的方法

    python bluetooth藍(lán)牙信息獲取藍(lán)牙設(shè)備類型的方法

    這篇文章主要介紹了python bluetooth藍(lán)牙信息獲取藍(lán)牙設(shè)備類型的方法,具體轉(zhuǎn)化方法文中給大家介紹的非常詳細(xì),非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • 利用pyinstaller或virtualenv將python程序打包詳解

    利用pyinstaller或virtualenv將python程序打包詳解

    這篇文章主要給大家介紹了利用pyinstaller將python程序打包的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 詳解如何使用pip卸載所有已安裝的Python包

    詳解如何使用pip卸載所有已安裝的Python包

    在開發(fā)過程中,我們可能會安裝許多 Python 包,有時需要徹底清理環(huán)境,以便從頭開始或者解決沖突問題,下面將介紹如何使用 pip 命令卸載所有已安裝的 Python 包,需要的朋友可以參考下
    2024-06-06
  • PyTorch一小時掌握之a(chǎn)utograd機制篇

    PyTorch一小時掌握之a(chǎn)utograd機制篇

    這篇文章主要介紹了PyTorch一小時掌握之a(chǎn)utograd機制篇,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • python?生成唯一id的四種方式

    python?生成唯一id的四種方式

    本文主要介紹了python?生成唯一id的四種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python基于win32實現(xiàn)窗口截圖

    python基于win32實現(xiàn)窗口截圖

    這篇文章主要為大家詳細(xì)介紹了python基于win32api實現(xiàn)窗口截圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Python 把兩層列表展開平鋪成一層(5種實現(xiàn)方式)

    Python 把兩層列表展開平鋪成一層(5種實現(xiàn)方式)

    這篇文章主要介紹了Python 把兩層列表展開平鋪成一層(5種實現(xiàn)方式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • pygame實現(xiàn)成語填空游戲

    pygame實現(xiàn)成語填空游戲

    這篇文章主要介紹了pygame實現(xiàn)成語填空游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python讀寫zip壓縮文件的方法

    Python讀寫zip壓縮文件的方法

    Python自帶模塊zipfile可以完成zip壓縮文件的讀寫,而且使用非常方便,下面我們就來演示一下Python讀寫zip文件的實例代碼,需要的朋友參考下吧
    2018-08-08
  • Python中的urllib庫高級用法教程

    Python中的urllib庫高級用法教程

    這篇文章主要介紹了Python中的urllib庫高級用法教程,想要請求需要設(shè)置一些請求頭,如果要在請求的時候增加一些請求頭,那么就必須使用request.Request類來實現(xiàn)了,比如要增加一個 User-Agent ,增加一個 Referer 頭信息等,需要的朋友可以參考下
    2023-10-10

最新評論

三都| 静乐县| 金塔县| 察隅县| 营口市| 临猗县| 鹤庆县| 涟水县| 甘泉县| 中牟县| 咸宁市| 高碑店市| 廉江市| 海伦市| 金溪县| 永德县| 奉贤区| 韶山市| 名山县| 开远市| 酉阳| 陆良县| 通江县| 岑巩县| 古丈县| 郎溪县| 普陀区| 岗巴县| 呼玛县| 云霄县| 金沙县| 都安| 河北省| 明溪县| 綦江县| 宁陵县| 常熟市| 句容市| 东海县| 邛崃市| 亳州市|