スパム防止機能を備えたお問い合わせフォームを作成しています。問題を部分的に解決するセッションを作成することにしました (おそらく)。ただし、成功ページにリダイレクトした後、セッション Cookie が設定されていないように、ブラウザに戻ってメッセージを再度送信できます。
ユーザーが戻ってメッセージを再送信できないようにするには、どうすればよいですか?
def index(request):
if request.method == 'POST':
form = ContactForm(request.POST or None)
if form.is_valid():
full_name = escape(form.cleaned_data['full_name'])
subject = escape(form.cleaned_data['subject'])
text = escape(form.cleaned_data['text'])
email = escape(form.cleaned_data['email'])
phone = escape(form.cleaned_data['phone'])
cc_myself = escape(form.cleaned_data['cc_myself'])
request.session.set_expiry(60)
request.session['has_commented'] = True
form.save()
messages.success(request, ugettext_lazy("Your message has been sent."))
return HttpResponseRedirect('/kontakt/success/')
else:
form = ContactForm()
return TemplateResponse(request, 'contact.html', {'form': form},)
def success(request):
return TemplateResponse(request, "success.html")
お問い合わせフォーム:
{% load i18n %}
<form class="grid_8" action="/kontakt/" method="post">
{% csrf_token %}
<h2 class="center"> {% trans "Formularz kontaktowy:"%} </h2>
<hr>
{% if request.session.has_commented %}
<h2>{% trans "You've already sent a message. Please wait 60 seconds to send another message" %}</h2>
{%else%}
{% for field in form %}
<div class="grid_3 ">
<div class="label">
{{ field.label_tag }}
</div>
<div class="help_text">
{% if field.errors %}
<div class="error">({{ field.errors|striptags }})</div>
{% endif %}
{{ field.help_text }}
</div>
</div>
<div class="grid_4 alpha">
{{ field }}
</div>
<div class="clear"></div>
{% endfor %}
<hr>
<div style="text-align: center;">
<input class="submit" type="submit" value="{% trans "Wyślij wiadomość" %}" />
</div>
{% endif %}
</form>