如何发送会话消息,在Django网站的匿名用户?
-
22-08-2019 - |
题
我常常显示有关的用户动作的消息来登录用我Django应用程序用户意见:
request.user.message_set.create("message to user")
我怎么能这样做匿名(不登录)的用户一样吗?没有request.user为匿名用户,但Django的文件说,在基于“会话”中间件你可以做同样的事情,上面的代码。链接到会话中间件Django文档声称它是可能的,但我无法找到如何从会议文件做到这一点。
解决方案
请参阅 http://code.google.com/p/django-session -messages / 直到能够在Django树基于会话的消息的土地(因为我看到最近,它被标记为1.2,所以没有希望快速另外...)。
补丁具有类似功能的另一个项目是Django的闪存( http://djangoflash.destaquenet.com/ )
其他提示
这是我做什么,使用上下文处理器:
project/application/context.py
(检查邮件并把它们添加到上下文):
def messages(request):
messages = {}
if 'message' in request.session:
message_type = request.session.get('message_type', 'error')
messages = {'message': request.session['message'],
'message_type': message_type}
del request.session['message']
if 'message_type' in request.session:
del request.session['message_type']
return messages
project/settings.py
(添加上下文到TEMPLATE_CONTEXT_PROCESSORS
):
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.core.context_processors.debug",
"django.core.context_processors.media",
"django.core.context_processors.auth",
"project.application.context.messages",
)
使用的功能messages
上面会在每次请求和任何它返回将被添加到模板的上下文中调用。有了这个地方,如果我想给用户一个消息,我可以做到这一点:
def my_view(request):
if someCondition:
request.session['message'] = 'Some Error Message'
最后,在模板你可以检查是否有错误显示:
{% if message %}
<div id="system_message" class="{{ message_type }}">
{{ message }}
</div>
{% endif %}
消息类型只是用来取决于它是什么(“错误”,“通知”,“成功”),并认为这是安装程序,你只能在一个时间为用户添加1个消息的方式的风格,但这是所有我真的永远都需要,因此对我的作品。它可以被容易地改变,以允许多个消息和这样。
直接在会话中,这是一种类似字典的对象存储数据。然后,在观看/模板,则检查该值。
这里的更多信息:
HTTP://文档。 djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views
您还可以创建一个中间件类来检查每个请求的会话对象,并完成你的构建上/推倒在那里。