Django добавляет contrib.messages из пользовательского промежуточного программного обеспечения - PullRequest
3 голосов
/ 17 мая 2011

Я реализовал пользовательское промежуточное ПО, которое проверяет определенные поля в профиле пользователя. Поля не обязательны при регистрации (чтобы пользователь мог быстро и легко зарегистрироваться), однако я бы предпочел, чтобы они заполняли их.

Мое промежуточное ПО проверяет, установлены ли они. Если нет, он уведомляет пользователя с помощью сообщения. Я столкнулся с двумя проблемами.

  1. Каждый раз, когда я отправляю опубликованную форму, поскольку ни один шаблон не отображает сообщения, промежуточное программное обеспечение добавит сообщение во второй раз, так как промежуточное программное обеспечение было вызвано, когда сообщение было опубликовано, и после перенаправления оно было вызвано снова. *

    Я решил эту проблему, перебирая сообщения в моем промежуточном программном обеспечении и проверяя, есть ли уже там сообщение, которое я собираюсь добавить. Если да, это не добавляет это снова.

  2. Когда пользователь исправляет проблему, обновляя свой профиль, при следующей загрузке страницы сообщения все еще там. После этого все работает. В начале своего промежуточного программного обеспечения я фактически поставил проверку, которая возвращает None, если запрос был опубликован (я бы подумал, что это решит обе проблемы, но это также не решит).

Есть идеи, как решить второй вопрос? Есть ли лучший способ решить мой первый?

Спасибо.

Edit:

Есть ли способ очистить сообщения в представлении? Я пробовал перебирать их (без storage.used = False), и они все еще там. Я ожидаю, что это решит обе мои проблемы.

Ответы [ 4 ]

1 голос
/ 19 апреля 2012

Yoy может использовать липкие сообщения https://github.com/AliLozano/django-messages-extends, то есть одно хранилище, которое хранит только сообщения в запросе, а не сохранять в сеансе

0 голосов
/ 27 апреля 2012

Просто поместите логику, которая создает сообщения в процессор контекста вместо промежуточного программного обеспечения. Измените запрос и верните пустой текст.

0 голосов
/ 17 мая 2011

Вы можете использовать process_reponse () метод Middleware, чтобы добавить сообщение. К тому времени вы уже знаете, показывать ли пользователю сообщение или нет, в зависимости от того, заполнено ли в его профиле поле.

Рассмотрите возможность использования django.contrib.messages. Возможно, вы не хотите показывать сообщение «заполните поле XYZ» во всех запросах, но только на нескольких страницах, например, когда пользователь входит в систему или просматривает страницу своего профиля.

0 голосов
/ 17 мая 2011

Итак, вы используете django.contrib.messages для хранения постоянных уведомлений? Он предназначен для показа одноразовых уведомлений, когда пользователь видит сообщение один раз, а затем оно исчезает. Типом вещей, для которых он предназначен, являются сообщения типа «Форма успешно отредактирована».

Что касается избавления от сообщений в стеке сообщений пользователя: всякий раз, когда вы используете RequestContext (обсуждается здесь ) для рендеринга шаблона, все сообщения будут сброшены (независимо от того, являются ли они на самом деле отображается на странице или нет).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...