django message

settings

INSTALLED_APPS = [
    'django.contrib.messages',  # 第一个位置
]
MIDDLEWARE = [
   'django.contrib.messages.middleware.MessageMiddleware',  # 第二个位置
]
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates']
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.messages.context_processors.messages',  # 第三个位置
            ],
        },
    },
]
MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
# MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
# MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
#自定义level
MESSAGE_TAGS = {
    50: 'danger'
}

前端

{% if messages %}
            {% for message in messages %}
                <div class="alert alert-{{ message.level_tag }} message fade in" role="alert">{{ message.message }}</div>
            {% endfor %}
{% endif %}
<script>
    $(function () {
        bindSideBar();
        bindMsg();
    })

    function bindMsg() {
        setTimeout(function () {
            $(".message").alert('close')
        }, 3000)
    }
</script>

视图层发msg

def add(request):
    from django.contrib import messages
    messages.success(request, '添加成功')
    return redirect('level_list')

视图层获取msg

def level_list(request):
    # 读取并删除msg
    from django.contrib.messages.api import get_messages
    messages = get_messages(request)
    for msg in messages:
        print(msg.message)

1.4 源码分析

前戏:message是一个对象(包裹)。

v1 = "szw"
v2 = ["szw",123]

class Message(object):
    def __init__(self, level, message, extra_tags=None):
        self.level = int(level)
        self.message = message
        self.extra_tags = extra_tags
		
obj = Message(10,"哈哈哈哈","123")
from django.contrib import messages
messages.add_message(reqeust, messages.ERROR, "删除成功1")
messages.add_message(reqeust, messages.SUCCESS, "删除成功2", extra_tags="哈哈哈")

image
image

  • 【设置】中间件process_request加载

  • 【设置】在视图函数中往message中写入值(内存)

  • 【设置】中间件process_response,将内存中新增的数据写入到数据源

  • 【新页面】中间件process_request加载

  • 【新页面】在视图函数或模板中读取message中的信息(老的数据源加载的+新增的)

  • 【设置】中间件process_response

    used = True,则只保存新增部分。
    added_new = True,老的数据源加载的+新增的都重新保存到数据源。
    
posted @ 2022-09-23 10:05  Sherwin_szw  阅读(35)  评论(0编辑  收藏  举报