我最近意识到我们的 Django Web 应用程序中的一个模块正在使用 django.contrib.messages。但是,模板的上下文处理器没有django.contrib.messages.context_processors.messages
添加处理器。
我担心当我将其推送到生产环境时,用户会看到所有生成它们的页面的所有旧消息。有没有办法为所有用户清除这些消息django shell
?
我最近意识到我们的 Django Web 应用程序中的一个模块正在使用 django.contrib.messages。但是,模板的上下文处理器没有django.contrib.messages.context_processors.messages
添加处理器。
我担心当我将其推送到生产环境时,用户会看到所有生成它们的页面的所有旧消息。有没有办法为所有用户清除这些消息django shell
?
将为会话已包含该消息的用户显示消息。所以你有几个选择要做。
如果您使用默认设置并且会话数据存储在数据库表中,您可以遍历活动会话并检查是否为它们存储了任何消息。
from django.contrib.sessions.models import Session
for s in Session.objects.all():
decoded_data_dict = s.get_decoded()
# Now you look for messages in the dict, delete them (del dict[key]) and save the session
如果您不使用默认设置并将会话数据存储在其他位置(Redis?),或者您不想采用以前的方式,则可以完全删除所有会话。这将有一个缺点,您的用户将被注销(这可能是可接受的结果)
您可以根据用户的每个请求执行此操作,您需要删除会话的消息而不删除所有会话对象。像下面这样的事情会做:
for key in request.session.keys():
del request.session[key]
或使用首选的 django-ish 方式删除它们:
storage = messages.get_messages(request)
storage.used = True
这种方法的缺点是您必须只删除消息,如果它是已登录用户的第一次访问,然后不要再这样做,因为您希望您的用户能够从现在开始查看他们的消息.