Django表单提交后刷新重复提交问题的修复方案咨询
解决Django表单提交后刷新重复提交的问题
这个问题的核心原因是:当你用POST请求提交表单后,浏览器会保存这个POST请求的状态,刷新页面时会重新发送相同的POST请求,导致数据被重复保存。解决这个问题的标准方案是遵循POST/REDIRECT/GET模式——处理完POST请求后,重定向到一个GET请求的页面,这样刷新时只会发送GET请求,不会重复提交表单。
修复步骤
- 从
django.shortcuts导入redirect方法 - 在处理完表单数据并保存后,用
redirect替代render返回响应,重定向到目标页面(通常是当前视图或成功页面)
修改后的完整代码
from django.shortcuts import render, redirect # 新增redirect导入 from free.models import contact def index(request): if request.method == 'POST': fullname = request.POST.get('fullname') email = request.POST.get('email') message = request.POST.get('message') en = contact(fullname=fullname, email=email, message=message) en.save() # 重定向到当前视图(需确保urls.py中该视图的name为'index') # 也可以直接用redirect('/')重定向到根路径 return redirect('index') # GET请求时正常渲染页面 return render(request, 'index.html')
额外优化(可选)
如果需要在重定向后给用户显示提交成功的提示,可以使用Django的messages框架:
- 导入
messages:from django.contrib import messages - 在
en.save()后添加:messages.success(request, '你的消息已成功提交!') - 在模板
index.html中添加消息显示代码:
{% if messages %} {% for message in messages %} <div class="alert alert-success">{{ message }}</div> {% endfor %} {% endif %}
内容的提问来源于stack exchange,提问作者Rana Uzair
相关产品推荐
相关产品推荐

