[英]Cancel the POST when the page is refreshed
我的问题是:当用户刷新表单时,将发送Form
的数据。
我有一个带有POST
请求的Form
。
用户写下他的名字,邮件和消息。 如果邮件正确,则发送邮件。
在我看来,如果Form
有效,则将消息添加到模型消息中。
之后,我禁用“发送”按钮。 但是,如果用户刷新页面,则会调用我的视图,并在模型中添加另一行。
我想在用户刷新页面时阻止POST。
我的观点:
def contact(request):
form = MessageForm(request.POST or None)
if form.is_valid():
name = form.cleaned_data['name']
message = form.cleaned_data['message']
mail = form.cleaned_data['mail']
new_message = Message()
new_message.name = name
new_message.message = message
new_message.mail = mail
new_message.save()
envoi = True
return render(request, 'vautmieux/contact.html', locals())
我的网址:
path('contact/', views.contact, name='contact'),
我的HTML:
<form action="{% url "contact" %}" method="post">
{% csrf_token %}
<div class="row">
<div class="col-md-6">
{{ form.name }}
{{ form.mail }}
</div>
<div class="col-md-6" >
{{ form.message }}
</div>
<button id="sendMessageButton" type="submit">ENVOYER LE MESSAGE !</button>
</div>
{% if envoi %}Votre message a bien été envoyé !{% endif %}
</form>
这是人们实现Post / Redirect / Get模式[wiki]的主要原因。 如果POST请求成功 ,则应将重定向返回到URL。 结果,浏览器将执行GET,并且如果浏览器随后执行刷新,则它将再次进行GET。
def contact(request):
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
form.save()
return redirect()
else:
form = MessageForm()
return render(request, 'vautmieux/contact.html', {'form': form})
在这里, 'some-message-successful-view'
需要替换为在发送消息成功时触发的视图名称。 该视图可以与此处定义的视图相同。 我建议使用Django的消息框架 [Django-doc]向用户发送消息,表明该消息已成功提交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.