【问题标题】:django redirect still allows post on reload only on mobile Chromedjango 重定向仍然允许仅在移动 Chrome 上重新加载后发布
【发布时间】:2015-06-01 13:54:34
【问题描述】:

用户提交后,我重定向回与用户在表单中提交数据的同一页面。我可以看到数据 POST,然后立即在 Firefox 36.0.4 桌面、Chrome 41.0.2272 桌面、Opera 10.0 iPhone 5、Chrome 41.0.2272 iPhone 5 中看到同一页面的 GET。但是,只有移动设备上的 Chrome 会导致刷新时“确认重新提交”,也不会再次加载所有 js。有解决这个问题的方法吗?

这是我的最小简单视图。

def workout(request):
    form = WorkoutInfoForm(request.POST or None)
    if form.is_valid():
        form.save()
        post = request.POST.copy()
        request.session['_old_post'] = post
        return redirect(reverse("workout.views.workout"))
    if not request.POST:
        old_post = request.session.get('_old_post')
        form = WorkoutInfoForm(old_post or None)
    return render_to_response("workout/track_workout.html",
                              locals(),
                              context_instance=RequestContext(request))

我的表单从我的模板开始 <form method='POST' action='' class="form-horizontal" role="form"> {% csrf_token %}

【问题讨论】:

  • Preventing form resubmission 的可能重复项
  • 感谢您的建议。副本没有帮助,因为我已经处于 POST/REDIRECT/GET 模式。即使在 GET 我仍然有刷新重新提交问题。也许我没有正确使用重定向。

标签: django redirect post get submit


【解决方案1】:

如果表单有效,您的代码将按预期工作。仅在表单无效的情况下才会出现所描述的问题。你可以试试

def workout(request):
    form = WorkoutInfoForm(request.POST or None)
    if request.POST:
        post = request.POST.copy()
        request.session['_old_post'] = post
        if form.is_valid():
            form.save()
        return redirect(reverse("workout.views.workout"))
    else:
        old_post = request.session.get('_old_post')
        form = WorkoutInfoForm(old_post or None)
    return render_to_response("workout/track_workout.html",
                              locals(),
                              context_instance=RequestContext(request))

【讨论】:

  • 感谢您的建议。我更改了代码以反映您的建议。在我运行 Firefox 36.0.4 和 Chrome 41.0.2272 的笔记本电脑上,代码可以正常工作,可以使用您的代码或我的原始代码进行刷新。当我在 iPhone 5 上尝试任一代码时,两者都可以在 Opera 10 上正常运行。但是,在手机上运行 Chrome 41.0.2272 时,刷新会导致“确认重新提交”。无论如何,我会保留你的建议。
猜你喜欢
  • 2018-08-19
  • 1970-01-01
  • 2011-10-16
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多