日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

pythonmessage用法_django 消息框架 message使用详解

發布時間:2024/10/5 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pythonmessage用法_django 消息框架 message使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

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

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

一、啟用消息框架

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

{% for message in messages %}

{{ message }}

{% endfor %}

{% endif %}

相關說明:

通過if判斷是否有消息;

messages是一個列表,必須用for標簽循環它;

即使你知道只有一條消息,也要迭代messages列表,否則下個請求中,上個請求的消息不會被清除。

可以通過message.tags拿到每個消息的CSS樣式

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

{% if messages %}

{% for message in messages %}

{% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Important: {% endif %}

{{ message }}

{% endfor %}

{% 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使用詳解

本文地址: http://www.cppcns.com/jiaoben/python/266507.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的pythonmessage用法_django 消息框架 message使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。