【问题标题】:Django prevent page cachingDjango 防止页面缓存
【发布时间】:2015-07-02 15:35:32
【问题描述】:

strong text我试图阻止页面被缓存,因为我不希望用户能够重新提交已经保存到数据库的表单。

我在views.py中尝试了以下

class ServiceCreate(LoginRequiredMixin, CreateView):
    model = Service
    form_class = ServiceCreateForm

    @method_decorator(never_cache)
    def dispatch(self, request, *args, **kwargs):
        return super(ServiceCreate, self).dispatch(request, *args, **kwargs)

但是,这不起作用,因为当用户点击后退按钮时,整个页面会立即显示。请问如何防止缓存?

更新 我是 Django 的新手,所以认为装饰器会指示浏览器不要缓存 - 我不明白还有服务器缓存。

【问题讨论】:

标签: django


【解决方案1】:

您所看到的与服务器缓存无关 - 都是浏览器方面的。

最终,您无法 100% 保证不会多次提交表单(用户找到方法...),因此您必须在服务器。但是,您可以大大降低发生这种情况的可能性:

  • 成功提交表单后,返回HttpResponseRedirect(或使用redirect 快捷方式)重定向浏览器。这将阻止浏览器刷新重新提交表单。

  • 在提交表单后使用javascript to disable the form submit button。我最近遇到了一些奇怪的错误和数据不一致,结果是有人双击表单的提交按钮造成的。在第一次单击后禁用按钮解决了问题(以及在服务器端进行更多验证以识别重复提交)。

  • 确保使用POST(而不是GET)提交表单。浏览器不太可能随便重新提交表单,我相信Django's CSRF protection 应该 也有助于防止错误提交。

【讨论】:

  • 感谢您的详尽回答。我认为您禁用提交按钮的第二个建议将是最好的。
猜你喜欢
  • 2020-05-27
  • 1970-01-01
  • 2013-02-20
  • 2013-05-18
  • 2011-11-04
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多