programing

요청 간에 Django 메시지가 반복될 수 있습니다(즉, 삭제되지 않음).

easyjava 2023. 4. 4. 23:19
반응형

요청 간에 Django 메시지가 반복될 수 있습니다(즉, 삭제되지 않음).

매우 드물게, Django 메시지는,HTML대답.그러면 사용자는GET다른 페이지가 표시되며, Django 메시지가 다시 렌더링됩니다.경우에 따라서는, 유저에게GET같은 메시지가 다시 표시됩니다.

이러한 현상이 발생하는 경우는 매우 드물지만, 발생할 경우 대부분의 사용자는 몇 분간 동일한 동작을 볼 수 있습니다.(그룹 크로스 브라우저 테스트에서 한 번 발생했으며, 회의실에 있는 모든 사람이 자리를 뜨기 전 약 5분 동안 각 컴퓨터에서 동일한 동작을 보았습니다.)

이 동작은 다양한 뷰에서 발생하며 각 뷰에서 동일한 방법으로 추가됩니다(아래 참조).

도입 환경(실행 중)에서도 에러를 확실히 재현할 수 없었습니다.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 핵심 개발자의 코멘트입니다.

"장고는 이 문제를 자동으로 정확하게 처리할 수 없다고 생각합니다.웹 사이트의 기본 템플릿에서 메시지를 루프하는 것은 매우 일반적인 패턴입니다.단순히 특정 페이지에 메시지가 표시될 수 있다는 이유로 캐싱을 비활성화하면 대부분의 웹 사이트에서 캐시를 중지하는 것입니다."

전체 티켓은 https://code.djangoproject.com/ticket/13894에서 확인하실 수 있습니다.

언급URL : https://stackoverflow.com/questions/19529859/occasionally-django-messages-are-repeated-across-requests-i-e-they-are-not-c

반응형