2016-09-15 2 views
1

Недавно я понял, что в модуле нашего веб-приложения Django используется django.contrib.messages. Однако в обработчике контекста шаблона не было добавлено процессора django.contrib.messages.context_processors.messages.Удалить все django.contrib.messages

Я беспокоюсь, что, когда я подталкиваю это к производству, пользователи будут видеть все свои старые сообщения для всех страниц, которые сгенерировали их. Есть ли способ очистить эти сообщения для всех пользователей от django shell?

+1

Где хранятся эти сообщения? Вы храните их в сеансе django? – SpiXel

+0

Да, в этом случае я использовал сеансы для их хранения. – Jedi

ответ

1

Сообщения будут отображаться для тех пользователей, чьи сессии уже содержат сообщение. Таким образом, у вас есть несколько вариантов.

  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 
    
  2. В случае, если вы не используете настройки по умолчанию и хранить данные сессии в другом месте (Redis?), Или вы не хотите идти предыдущий путь, вы можете отказаться от всех сеансов в целом. Это будет иметь недостаток, что ваши пользователи будут выведены из системы (что может быть приемлемым последствием)

  3. Вы можете сделать это по каждому запросу своих пользователей, вам нужно удалить сообщения сеанса без удаления всего объекта сеанса. Что-то вроде следующего будет делать:

    for key in request.session.keys(): 
        del request.session[key] 
    

или удалить их с помощью Предпочитаемые Джанго-иш путь:

storage = messages.get_messages(request) 
    storage.used = True 

Недостатком этого метода является то, что вы должны удалить только сообщения, если его первый визит уже зарегистрированного пользователя, а затем не делайте этого снова, так как вы хотите, чтобы ваши пользователи могли просматривать свои сообщения с этого момента.

  1. Просто удалите промежуточное ПО и отпустите сообщения вообще, если вам это не нужно, не используйте его.
0

Сообщения обычно хранятся либо в сеансах, либо в виде куки (проверьте storage backend). Вы можете очистить их оттуда, но они будут очищены, если сеансы/файлы cookie обычно очищаются в любом случае (при выходе пользователя из системы в худшем случае).

Если вы хотите быть уверены, что эти сообщения не отображаются, вы можете disable the messaging framework:

Если вы не хотите использовать сообщения, вы можете удалить «» django.contrib.messages из вашего INSTALLED_APPS , строку MessageMiddleware из MIDDLEWARE и обработчик контекста сообщений из TEMPLATES.

Смежные вопросы