python - 如何向 Django 站点中的匿名用户发送 session 消息?

标签 python django session django-views

我经常使用以下方法在我的 Django 应用 View 中向登录用户显示有关用户操作的消息:

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

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

最佳答案

这就是我所做的,使用上下文处理器:

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 条消息,但是这就是我真正需要的,所以它对我有用。它可以很容易地更改为允许多条消息等。

关于python - 如何向 Django 站点中的匿名用户发送 session 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697902/

相关文章:

ruby-on-rails - 如何清空/销毁 Rails 中的 session ?

python - Flask-WTForms 为 IntegerField 抛出错误而不是验证失败

python - Pandas Python 上的 Group by 和 where 查询

Django:在迁移期间禁用信号

python - Django: AttributeError: 'UniqueConstraint' 对象没有属性 'fields_orders'

session - 如何跟踪我网站用户的在线状态?

php - 使用 session ID 取消设置特定 session

python - 如何在Python中解码日元符号?

python - python.subprocess(cppBinaryExe) 会影响 cppBinaryExe 的性能吗?

django - 我如何将 Python 图像库安装到 django 环境?