Bardzo rzadko, wiadomość Django jest renderowana w odpowiedzi na . Następnie użytkownik jest ponownie wyświetlana, a wiadomość Django jest ponownie wyświetlana. Czasami użytkownik będzie następnie odsłaniać kolejną stronę i ponownie wyświetli tę samą wiadomość.Od czasu do czasu wiadomości Django są powtarzane dla żądań (tj. Nie są usuwane).
To zdarza się bardzo rzadko, ale kiedy to robi, większość użytkowników widzi to samo zachowanie przez kilka chwil. (Zdarzyło się to raz w teście z grupową przeglądarką, a wszyscy w pokoju widzieli to samo zachowanie na każdym z komputerów przez około pięć minut przed odejściem).
To zachowanie wystąpiło w wielu różnych widokach; a poza tym każdy widok dodaje je w ten sam sposób (patrz poniżej).
Nie udało mi się wiarygodnie odtworzyć błędu w naszym wdrożonym środowisku (działającym pod wsgi.py
) lub podczas uruchamiania projektu w środowisku lokalnym (działającym pod kontrolą manage.py
). (Zaznaczę, że nigdy nie widziałem tego problemu lokalnie.)
Czy ktoś ma pojęcie, dlaczego tak się dzieje?
Przykład dodawania wiadomości powitalnej.
messages.success(
request,
"Changes to {form} {request} were successfully saved."\
.format(form=self.form.display_name,
request=serv_request_id_as_url(self.serv_request))
)
Jest to kod szablonu który renderuje wiadomość:
<div id="messages">
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
<a class="close" data-dismiss="alert" href="#" title="Close"><span class="accessibility">Close this message.</span>×</a>
<strong>{{ message.message|safe }}</strong>
</div>
{% endfor %}
</div>
Istotne ustawienia:
MIDDLEWARE_CLASSES = (
'django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'outage.middleware.OutageMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'utdirect.middleware.HttpHeaderMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', ...)
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
DATABASES = {'default': {'ENGINE': 'django.db.backends.oracle',
...}}
można określić, jaka jest wiadomość? – Joe
To tylko przypuszczenie, ale jeśli dzieje się to tylko w środowisku wdrożonym, może to mieć coś wspólnego z buforowaniem lub podobnym ... Gdy wystąpi problem, serwer mógł utworzyć nowe procesy, które mają wpływ na pamięć podręczną, wystarczy pomyśleć ... –
Proszę upewnij się, że odczyt sesji nie jest buforowany i że zapis sesji rzeczywiście się powiódł. Django po cichu zignoruje sesje zawierające na przykład nieprzyswajalne obiekty, które mogą spowodować, że wiadomości nie będą poprawnie usuwane. – patrys