惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - 成都ABC

json 反序列化,高手请进 MVC 资料推荐 杂类 资料收集 收集到的非常好的第三方控件 Silverlight 开源框架 微软企业库资料 Silverlight 收藏网站 Silverlight的依赖属性与附加属性 对MVP和MVVM的一点看法 不需要Orchestration,通过Pipeline设定动态发送端口属性 使用BizTalk Server常见问题处理 在哪找biztalk的例子(转) 转:把自己搜集到的一些silverlight网站、第三方控件及开源代码与大家们分享(微软转载) 鸡肋: 评在IE下Siverlight3对快捷键的支持 siverlight高手解答:无法阻止silverlight把快捷键传递给IE7 WCF综合运用之:聊天系统 微软:PHP在IIS 7上雄起 - 成都ABC - 博客园 WCF学习之:实例上下文模式和并发模式的性能影响
Django Message框架尝鲜
成都ABC · 2011-06-29 · via 博客园 - 成都ABC

一 介绍

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 来告诉用户,他们的数据提交成功了。