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

如何解决Django页面刷新后重复添加注册记录问题

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

问题描述

开发的学生注册表单可收集姓名、性别、地址、出生日期(dob)、州/邦信息。提交表单后页面显示「记录已添加」提示并重置为空表单,但刷新页面时会重复添加相同记录,每刷新一次新增一条重复数据。需实现仅在点击提交按钮时添加记录的Django解决方案。

核心解决方案:Post/Redirect/Get (PRG) 模式

问题根源是表单提交后直接返回渲染页面,浏览器保留POST请求历史,刷新时会重新发送POST请求导致重复保存。采用PRG模式,提交成功后重定向到GET请求页面,避免重复提交。

修改后的 views.py 代码

def std_registration_view(request, username):
    if 'UserIsActive' in request.session:
        # 实例化表单,原代码此处未加括号,属于不规范写法
        form = Student_Registration()
        if request.method == "POST":
            form = Student_Registration(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                name = form.cleaned_data['full_name']
                messages.success(request, "Record is added for " + name)
                # 提交成功后重定向到注册页面(GET请求),传递username参数
                return redirect('stdregistration', username=username)
        return render(request, 'std_registration/registration.html', {"username": username, 'form': form})
    return redirect('login')

关键修改说明

  1. 替换直接渲染为重定向:表单验证通过并保存后,不再使用render返回页面,而是用redirect跳转到注册页面的URL(对应stdregistration路由)。
  2. 修复表单实例化问题:原代码中form=Student_Registration是引用类而非实例化,改为form=Student_Registration()确保表单正常初始化。
  3. 保留提示信息:通过Django的messages框架传递成功提示,重定向后依然能在模板中正常显示。

效果验证

  • 提交表单后,页面自动重定向到注册页面,表单重置为空,「记录已添加」提示正常显示。
  • 刷新页面时,浏览器仅发送GET请求加载注册页面,不会触发表单提交逻辑,彻底避免重复添加记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:08:10