簡體   English   中英

偶爾,Django消息會在請求中重復(即,它們不會被清除)

[英]Occasionally, Django messages are repeated across requests (i.e., they are not cleared)

很少, Django消息在HTML響應中呈現。 然后,用戶GET另一個頁面,並再次呈現Django消息。 有時,用戶將GET其后的另一頁,並且相同的消息將再次顯示。

這很少發生,但是當它發生時,大多數用戶會在一段時間內看到相同的行為。 (它發生在一組跨瀏覽器測試中,並且在離開之前,房間里的每個人在他們的每台計算機上看到相同的行為大約五分鍾。)

許多不同的視圖都出現了這種情況; 此外,每個視圖以相同的方式添加它們(見下文)。

我無法在我們的部署環境(運行wsgi.py )或在本地環境(運行manage.py )上運行項目時可靠地重現錯誤。 (我會注意到我從未在本地見過這個問題。)

有誰知道為什么會發生這種情況?

添加成功消息的示例。

       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))
        )

這是呈現消息的模板代碼:

<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>&times;</a>
      <strong>{{ message.message|safe }}</strong>
    </div>
  {% endfor %}
</div>

相關設置:

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',
                         ...}}   

這似乎是由Django中的緩存引起的一個着名問題。 以下是一位Django核心開發人員的評論:

“我不認為Django可以自動正確地處理這個問題。在網站的基本模板中循環消息是一種非常常見的模式。如果我們僅僅因為消息可能在給定頁面上顯示而禁用緩存,我們'重新抓住大多數網站的緩存。“

完整的門票在這里: https//code.djangoproject.com/ticket/13894

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM