【问题标题】:Store messages after showing in the template在模板中显示后存储消息
【发布时间】:2021-09-07 21:40:41
【问题描述】:

我想存储最后的消息,以便用户有机会再次查看。

演出结束后如何保存?演出前?我需要实现一个 db 模型吗?

【问题讨论】:

  • 是的,您必须使用 db 模型。但是使用轻量级的 NoSql,例如 db (redis, mongo, ...)
  • 其实我的消息量不是很大,我还是用postgres。我的观点是如何在显示之前或之后拦截所有消息?
  • 创建一个新模型将其存储在 postgres 中。这没什么大不了的,因为您只会存储 100 条新闻消息。

标签: django django-messages


【解决方案1】:

您可以使用redis, Redis 可能会派上用场。

【讨论】:

    【解决方案2】:

    我找到了一个不错的解决方案,无需使用外部库。只用我可爱的蟒蛇!

    首先我创建一个函数来将消息存储到数据库中:

    def save_messages(message):
        db.objects.add(ManyToMany.object.create(message))
        return redirect('message_saved')
    

    然后我让函数在任何时候将消息发送到 contrib 消息本身时运行

    MYPROJECT\venv\Lib\site-packages\django\contrib\messages\api.py

    def add_message(request, level, message, extra_tags='', fail_silently=False):
    """
    Attempt to add a message to the request using the 'messages' app.
    """
    try:
        messages = request._messages
    except AttributeError:
        if not hasattr(request, 'META'):
            raise TypeError(
                "add_message() argument must be an HttpRequest object, not "
                "'%s'." % request.__class__.__name__
            )
        if not fail_silently:
            raise MessageFailure(
                'You cannot add messages without installing '
                'django.contrib.messages.middleware.MessageMiddleware'
            )
    else:
        from WALLAWALLA import save_messages
        save_messages(message) 
        return messages.add(level, message, extra_tags)
    

    这真的很好用

    【讨论】:

      猜你喜欢
      • 2013-12-01
      • 2019-11-26
      • 2013-12-23
      • 2017-01-03
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多