全部删除 django.contrib.messages
Delete all django.contrib.messages
我最近意识到我们的 Django 网络应用程序中的一个模块正在使用 django.contrib.messages。但是,模板的上下文处理器没有添加 django.contrib.messages.context_processors.messages
处理器。
我担心当我将其推向生产环境时,用户会看到生成它们的所有页面的所有旧消息。有没有办法为来自 django shell
的所有用户清除这些消息?
消息通常存储在会话或 cookie 中(检查您的 storage backend)。您可以从那里清除它们,但是当 sessions/cookies 通常被清除时它们将被清除(最坏情况下用户注销)。
如果您想确保这些消息不显示,您可以disable the messaging framework:
If you don’t want to use messages, you can remove 'django.contrib.messages' from your INSTALLED_APPS, the MessageMiddleware line from MIDDLEWARE, and the messages context processor from TEMPLATES.
消息将显示给会话中已包含该消息的那些用户。所以你有几个选择。
如果您使用默认设置并且会话数据存储在数据库中 table,您可以遍历活动会话并检查是否为它们存储了任何消息.
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?),或者您不想采用以前的方式,则可以完全删除所有会话。这将有一个缺点,您的用户将被注销(这可能是 acceptable 的后果)
您可以根据用户的每个请求执行此操作,您需要删除会话的消息而不删除所有会话对象。像下面这样的东西会做:
for key in request.session.keys():
del request.session[key]
或使用首选的 django-ish 方式删除它们:
storage = messages.get_messages(request)
storage.used = True
此方法的缺点是,如果是已登录用户的首次访问,您只需删除消息,然后不要再这样做,因为您希望您的用户能够查看他们的消息从现在开始。
- 干脆把中间件去掉,消息一并去掉,不需要就别用
我最近意识到我们的 Django 网络应用程序中的一个模块正在使用 django.contrib.messages。但是,模板的上下文处理器没有添加 django.contrib.messages.context_processors.messages
处理器。
我担心当我将其推向生产环境时,用户会看到生成它们的所有页面的所有旧消息。有没有办法为来自 django shell
的所有用户清除这些消息?
消息通常存储在会话或 cookie 中(检查您的 storage backend)。您可以从那里清除它们,但是当 sessions/cookies 通常被清除时它们将被清除(最坏情况下用户注销)。
如果您想确保这些消息不显示,您可以disable the messaging framework:
If you don’t want to use messages, you can remove 'django.contrib.messages' from your INSTALLED_APPS, the MessageMiddleware line from MIDDLEWARE, and the messages context processor from TEMPLATES.
消息将显示给会话中已包含该消息的那些用户。所以你有几个选择。
如果您使用默认设置并且会话数据存储在数据库中 table,您可以遍历活动会话并检查是否为它们存储了任何消息.
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?),或者您不想采用以前的方式,则可以完全删除所有会话。这将有一个缺点,您的用户将被注销(这可能是 acceptable 的后果)
您可以根据用户的每个请求执行此操作,您需要删除会话的消息而不删除所有会话对象。像下面这样的东西会做:
for key in request.session.keys(): del request.session[key]
或使用首选的 django-ish 方式删除它们:
storage = messages.get_messages(request)
storage.used = True
此方法的缺点是,如果是已登录用户的首次访问,您只需删除消息,然后不要再这样做,因为您希望您的用户能够查看他们的消息从现在开始。
- 干脆把中间件去掉,消息一并去掉,不需要就别用