You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单提交后刷新重复提交问题的修复方案咨询

解决Django表单提交后刷新重复提交的问题

这个问题的核心原因是:当你用POST请求提交表单后,浏览器会保存这个POST请求的状态,刷新页面时会重新发送相同的POST请求,导致数据被重复保存。解决这个问题的标准方案是遵循POST/REDIRECT/GET模式——处理完POST请求后,重定向到一个GET请求的页面,这样刷新时只会发送GET请求,不会重复提交表单。

修复步骤

  1. 从django.shortcuts导入redirect方法
  2. 在处理完表单数据并保存后,用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框架:

  1. 导入messages:from django.contrib import messages
  2. 在en.save()后添加:messages.success(request, '你的消息已成功提交!')
  3. 在模板index.html中添加消息显示代码:
{% if messages %}
    {% for message in messages %}
        <div class="alert alert-success">{{ message }}</div>
    {% endfor %}
{% endif %}

内容的提问来源于stack exchange,提问作者Rana Uzair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:57:06