我最近意识到我们的Django Web应用程序中的模块正在使用django.contrib.messages。但是,模板的上下文处理器没有添加django.contrib.messages.context_processors.messages
处理器。
我担心当我将其推送到制作时,用户将看到所有生成它们的页面的旧消息。有没有办法从django shell
?
答案 0 :(得分:1)
将为会话已包含该消息的用户显示消息。所以你有几个选择。
如果您使用默认设置并且会话数据存储在数据库表中,您可以遍历活动会话并检查是否存储了任何消息。
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
此方法的缺点是,您必须仅删除邮件,如果它是已登录用户的第一次访问,然后不再执行此操作,因为您希望用户能够查看其邮件从现在开始。
答案 1 :(得分:0)
消息通常存储在会话或cookie中(请查看storage backend)。您可以从那里清除它们,但是当会话/ cookie通常被清除时(在最糟糕的用户注销时)它们将被清除。
如果您想确定这些消息无法显示,您可以disable the messaging framework:
如果您不想使用消息,可以删除' django.contrib.messages'来自您的INSTALLED_APPS,来自MIDDLEWARE的MessageMiddleware行,以及来自TEMPLATES的消息上下文处理器。