Django messages框架

来源:http://www.cnblogs.com/jl-bai/archive/2016/12/22/6209653.html
-Advertisement-
Play Games

一.簡介 在網頁應用中,你經常需要在處理完表單或其它類型的用戶輸入後,顯示一個通知消息(也叫做“flash message”)給用戶 對於這個功能,Django 提供基於Cookie 和會話的消息,無論是匿名用戶還是認證的用戶。 其消息框架允許你臨時將消息存儲在請求中,併在接下來的請求(通常就是下一 ...


一.簡介

  在網頁應用中,你經常需要在處理完表單或其它類型的用戶輸入後,顯示一個通知消息(也叫做“flash message”)給用戶

對於這個功能,Django 提供基於Cookie 和會話的消息,無論是匿名用戶還是認證的用戶。

其消息框架允許你臨時將消息存儲在請求中,併在接下來的請求(通常就是下一個請求)中提取它們並顯示。每個消息都帶有一個特定level 標簽,表示其優先順序(例如infowarning 或error

二.啟用消息框架 

消息框架的實現通過一個中間件 類和對應的context processor。

django-admin startproject 創建的預設settings.py  已經包含啟用消息框架功能需要的所有的設置:

  • INSTALLED_APPS 中的'django.contrib.messages'

  • MIDDLEWARE_CLASSES 中的'django.contrib.sessions.middleware.SessionMiddleware' 和'django.contrib.messages.middleware.MessageMiddleware'

    預設的後端存儲 依賴sessions所以MIDDLEWARE_CLASSES 中必須啟用SessionMiddleware 並出現在MessageMiddleware 之前。

  • TEMPLATES 設置中定義的DjangoTemplates 的'context_processors' 選項包含'django.contrib.messages.context_processors.messages'

如果你不想使用消息框架,你可以刪除INSTALLED_APPS 中的 'django.contrib.messages'MIDDLEWARE_CLASSES 中的MessageMiddleware 和TEMPLATES 中的messages context processo

2.1 配置消息框架引擎

  

消息框架可以使用不同的後臺存儲臨時消息。

Django 在django.contrib.messages 中提供三個內建的存儲類:

class storage.session.SessionStorage

這個類存儲所有的消息於請求的會話中。因此,它要求啟用Django 的contrib.sessions 應用。

class storage.cookie.CookieStorage

這個類存儲消息數據於與Cookie 中(已經用一個安全的哈希進行簽名以防止篡改)以在請求之間傳遞消息。如果Cookie 數據的大小將超過2048 位元組,將丟棄舊的消息。

class storage.fallback.FallbackStorage

這個類首先使用CookieStorage,如果消息塞不進一個Cookie 中則使用SessionStorage。 它同樣要求啟用Django 的contrib.sessions 應用。

這個行為避免每次都寫會話。在通常情況下,它提供的性能應該是最好的。

FallbackStorage 是預設的存儲類。如果它不適合你的需要,你可以通過設置 MESSAGE_STORAGE 為它的完整導入路徑選擇另外一個存儲類,例如:

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

3.3 消息級別

  消息框架的級別是可配置的,與Python logging 模塊類似。消息的級別可以讓你根據類型進行分組,這樣它們能夠在不同的視圖和模板中過濾或顯示出來

django.contrib.messages 導入的內建級別有:

ConstantPurpose
DEBUG Development-related messages that will be ignored (or removed) in a production deployment
INFO Informational messages for the user
SUCCESS An action was successful, e.g. “Your profile was updated successfully”
WARNING A failure did not occur but may be imminent
ERROR An action was not successful or some other failure occurred

MESSAGE_LEVEL 設置可以用來改變記錄的最小級別(它還可以在每個請求中修改)。小於這個級別的消息將被忽略。

若要修改消息級別的預設標簽,設置MESSAGE_TAGS為包含你想要修改的級別的字典

from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
    messages.INFO: '',
    50: 'critical',
}

3.3 在視圖及模板中使用

add_message(request, level, message, extra_tags='', fail_silently=False)

例 

新增消息

from django.contrib import messages
messages.add_message(request, messages.INFO, 'Hello world.')

有幾個快捷方法提供標準的方式來新增消息並帶有常見的標簽(這些標簽通常表示消息的HTML 類型)

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.')

3.4 顯示消息

get_messages(request)

在你的模板中,像下麵這樣使用:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

三.配置使用

  以上只是簡單舉例使用,看更詳細文檔請參考 https://docs.djangoproject.com/en/1.10/ref/contrib/messages/

  在生產使用中我們可以把它整合成一個模塊便於調用,結合前端顯示當有錯誤或者其它信息時瀏覽器可以alert消息

from django.contrib.messages import constants as message_constants

MESSAGE_LEVEL = message_constants.INFO



TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates")],
        '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',
            ],
        },
    },
]
settings
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.contrib import messages
def flash(request, title, text, level='info'):
    """
    利用django的message系統發送一個信息。
    """
    level_map = {
        'info': messages.INFO,
        'debug': messages.DEBUG,
        'success': messages.SUCCESS,
        'warning': messages.WARNING,
        'error': messages.ERROR
    }

    level = level_map[level]

    messages.add_message(request, level, text, extra_tags=title)
    return 'ok'
message method
{% if messages %}
<script>
    {% for msg in messages %}
        alert('{{ msg.message }}');
    {% endfor %}
</script>
{% endif %}
前端顯示

VIEWS調用

 result = XXXXX
      if result:
         flash(request,"success", "成功!")
      else:
         flash(request,"error",  "。。。。")

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 菜單收縮有很多種方法具體如何實現還是看個人想法: 第一種通過後臺控制收起與展開: 效果圖: 代碼 : <Grid> <Grid.ColumnDefinitions> <ColumnDefinition x:Name="cd" Width="154"/> <ColumnDefinition /> </ ...
  • 用html實現圖片上傳 後臺採用.net其中在這裡要借用一個js插件 在這裡我會寫一個圖片上傳的一個小Demo,有不全的地方多多包容,和提議, 我把已經寫好的demo已經上傳到百度雲 在這裡可以下載 http://pan.baidu.com/s/1bG2934 開始 html中的內容是 <body> ...
  • 年關將至,對於大部分程式員來說,馬上就可以閑下來一段時間了,然而在這個閑暇的時間里,唯有爭論哪門語言更好可以消磨時光,估計最近會有很多關於java與.net的博文出現,我表示要作為一個吃瓜群眾,靜靜的看著大佬們發表心情。 以上的廢話說的夠多了,這裡就不再廢話了,還是切入正題吧。 在項目開發中,對於系 ...
  • 本文要介紹的是ASP.NET怎樣讀寫文本文件,但更重要的是實現的過程。使用的工具是Visual Studio 2015 ,.NET版本是4.6.1 。一共建立的2個項目,HoverTreePanel和HoverTreeWeb,都是ASP.NET項目。文章末尾附源碼下載。項目結果如下圖:讀寫文件功能在 ...
  • 在多線程(線程同步)中,我們將學習多線程中操作共用資源的技術,學習到的知識點如下所示: 執行基本的原子操作 使用Mutex構造 使用SemaphoreSlim構造 使用AutoResetEvent構造 使用ManualResetEventSlim構造 使用CountDownEvent構造 使用Bar ...
  • 目錄 前言 OAuth2.0簡介 授權模式 (SimpleSSO示例) 使用Microsoft.Owin.Security.SimpleSSO模擬OpenID認證 通過authorization code授權模式申請令牌 通過implicit授權模式申請令牌 通過password模式申請令牌 通過c ...
  • 你真的懂異常(Exception)嗎? 目錄 異常介紹 異常的特點 怎樣使用異常 處理異常的 try-catch-finally 捕獲異常的 Catch 塊 釋放資源的 Finally 塊 捕獲異常的 Catch 塊 釋放資源的 Finally 塊 一、異常介紹 我們平時在寫程式時,無意中(或技術不 ...
  • 隨著公司業務的發展,網站的日活數也逐漸增多,以前只需要考慮將所需要的功能實現就行了,當日活越來越大的時候,就需要考慮對伺服器的資源使用消耗情況有一個清楚的認知。 最近老是發現資料庫的連接數如果幾天不重啟伺服器,就經常會發現有很多sleep很久的資料庫連接,對資料庫伺服器的性能有較大的影響。所以需要知 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...