형태 후 제출하는 대신 렌더링 사용하는, HTTPResponseRedirect을 사용합니다. POST 데이터를 성공적으로 처리 한 후에는 항상 HttpResponseRedirect을 반환하십시오. 이렇게하면 사용자가 뒤로 버튼을 누르면 데이터가 두 번 게시되지 않습니다.
여기에서 직면하는 문제는 HTTPResponseRedirect가 REGISTRATION_SUCCESSFUL 상태의 컨텍스트를 전달할 수 없다는 것입니다.
상태에 따라 내 템플릿에 성공적인 등록을 나타내는 메시지가 표시됩니다.
여기서는 Django's messages framework을 사용할 수 있습니다.
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import RegistrationForm
def registration(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
# ... do something special here if needed
messages.add_message(request, messages.INFO, 'Registration was successful!')
return HttpResponseRedirect(reverse('login_page'))
else:
form = RegistrationForm()
return render(request, 'registration.html', {'form': form})
는 이제 "login_page"에, 당신은 메시지를 표시 할 수 있습니다 오른쪽
HTTPResponseRedirect하기 전에, 당신이 뭔가를 할 수 있습니다. 참고 - 메시지는 세션별로, 그래서 메시지 만 리디렉션 사용자에게 표시됩니다 "등록 성공"
login_page.html :합니다 (messages documentation에서 예)
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }} </li>
{% endfor %}
</ul>
{% endif %}
<form method="post">{% csrf_token %}
{{ form }} {# Your login form #}
</form>
이 예에서 추가 한 모든 메시지는 로그인 양식 위에 표시됩니다. "잘못된 등록"과 같은 다른 메시지가 있으면 해당 메시지가 표시됩니다.
받는 다음 추가하여 Enable the Django Messages Framework주십시오 당신의 settings.INSTALLED_APPS :
INSTALLED_APPS = (
...
'django.contrib.messages',
)
그리고 당신의 settings.MIDDLEWARE_CLASSES이 포함되어야합니다
MIDDLEWARE_CLASSES = (
...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
을 그리고 당신의 settings.TEMPLATE_CONTEXT_PROCESSORS가 포함되어야합니다
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.contrib.messages.context_processors.messages',
)
이것은 그랬습니다! 정말 고맙습니다. 위의 것을 구현하려는 사람은 settings.py 파일이 제대로 구성되었는지 확인하십시오 (문제가 있음). –
@DarylChan - 향후 독자를위한 settings.py 코멘트를 기반으로 답변을 업데이트했습니다. –