当前位置:  开发笔记 > 编程语言 > 正文

如何向Django站点中的匿名用户发送会话消息?

如何解决《如何向Django站点中的匿名用户发送会话消息?》经验,为你挑选了1个好方法。

我经常使用以下方式向我的Django应用程序视图中的用户操作显示用户操作的消息:

request.user.message_set.create("message to user")

我怎么能为匿名(未登录)用户做同样的事情?匿名用户没有request.user,但Django文档说使用"会话"中间件你可以做与上面代码相​​同的事情.链接到会话中间件的Django文档声称它是可能的,但我无法从会话文档中找到如何做到这一点.



1> Paolo Bergan..:

这就是我使用上下文处理器做的事情:

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 %}
    
{{ message }}
{% endif %}

消息类型仅用于根据它的样式("错误","通知","成功")以及设置方式,您一次只能为用户添加1条消息,但这就是全部我真的需要它,这对我有用.它可以很容易地改变以允许多个消息等.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有