Django Message框架尝鲜
一 介绍
Django1.2之前有个基于cookie 和session的Message框架,是针对验证用户的,现在Django1.2框架扩展了Message,让它也支持匿名用户。也就是说
用户不需要通过验证,即可用Message框架了。Message框架允许你临时存储信息到request里,然后取出来显示他们。每条信息由自己的level(等级)
来决定它们的显示优先级。比如:info 一般的信息,warning警告,或者error错误。
二启用Message框架
Message框架其实可以当成一个中间件类和相应的上下文处理器,这样更具通用性和简便性。要开启它,和往常的中间件一样,在settings.py模块MIDDLEWARE_CLASSES中,加入:
'django.contrib.messages.middleware.MessageMiddleware'
值得注意的是,它必须在session中间件之下,因为它是基于session的,比如:
'django.contrib.sessions.middleware.SessionMiddleware'
'django.contrib.messages.middleware.MessageMiddleware'
在settings.py模块TEMPLATE_CONTEXT_PROCESSORS中,加入:
'django.contrib.messages.context_processors.messages’
在settings.py模块 INSTALLED_APPS中,加入:
'django.contrib.messages'
(其实你用Django1.2建立工程的时候已经默认开启了,你只需要检查一下)
三 使用
message包括不少的知识点,在这里不想完整描述,只是讲一下它的常用使用方法,还是老做法,我们模拟一下需求来讲解。
我们添加或者修改一条记录时,操作的过程中可能需要把一些信息呈现给用户知道,不管是用户的数据符合要求与否,或者是操作成功与否等等。这下Message就派上用场了。
比如在views中的一个action里:
from django.contrib import messages
def add(request)
if info_error:
...
messages.error(request, 'info error.')
elif not info_error:
...
messages.warning(request, 'the info have not saved.')
messages.info(request, 'info all right.')
在views的action里我们已经把要传递的信息存储到request的messages变量里了,我们现在可以呈现他们了:
在templates里这样编写:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
message request变量里可以显示多条message(如上面的add,当not info_error时,messages就是两条),在templates里循环他们即可。
{% if message.tags %} class="{{ message.tags }}"{% endif %}
上面这段代码用处是,根据message的level给他们指定的class,如是错误信息,tags是error,具体的参考下面tags的种类:
DEBUG debug
INFO info
SUCCESS success
WARNING warning
ERROR error
我们在编写样式时,分别定义不同的tags的样式,呈现给用户的时候,就显得更友好了。
值得注意的是,messages是在本request周期内,如果到了下个request时,message自然就清空了。很酷呵呵。
这 么说来,只要是在本request周期内的信息,我们可以在不同的页面上呈现他们。比如,一个action提交后,发现了一些不符合规定的表单数据,我们 可以通过messages在本页面显示他们,但如果数据正确,我们跳到其他友好的页面,照样可以使用messages 来告诉用户,他们的数据提交成功了。