gpt4 book ai didi

python - 刷新页面时取消POST

转载 作者:行者123 更新时间:2023-12-01 00:42:07 34 4
gpt4 key购买 nike

我的问题是:当用户刷新表单时,Form 中的数据被发送。

我有一个带有 POST 请求的 Form

用户写下他的姓名、邮件和消息。如果邮件正确,则消息将被发送。

在我看来,如果Form有效,我会在模型消息中添加消息。

之后我禁用了“发送”按钮。但是,如果用户刷新页面,则会调用我的 View ,并在我的模型中添加另一行。

我希望,当用户刷新页面时,阻止 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 pattern [wiki] 的主要原因。如果 POST 请求成功,您应该返回一个指向 URL 的重定向。结果浏览器会执行一次 GET,如果浏览器稍后执行刷新,则会再次执行 GET。

def contact(request):
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
form.save()
<b>return redirect(<i>'some-message-successful-view'</i>)</b>
else:
form = MessageForm()
return render(request, 'vautmieux/contact.html', {'form': form})

此处'some-message-successful-view'需要替换为成功发送消息时触发的 View 的名称。这可以与此处定义的 View 相同。我建议使用Django's message framework [Django-doc]向用户发送消息已成功提交的消息。

关于python - 刷新页面时取消POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57270197/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com