요청 간에 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>×</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
'programing' 카테고리의 다른 글
| 오라클 sid 및 데이터베이스 이름 확인 중 (0) | 2023.04.04 |
|---|---|
| Jackson은 json에 백슬래시를 추가합니다. (0) | 2023.04.04 |
| JSON 개체의 델타 인코딩 (0) | 2023.04.04 |
| 상대 포지셔닝을 끄려면 어떻게 해야 합니까? (0) | 2023.04.04 |
| ng-hide CSS 이행이 완료될 때까지 요소를 표시하지 않습니까? (1) | 2023.03.25 |