停止通过疯狂的按钮点击生成的多个视图调用(Django 应用程序)

2024-01-08

我正在基本 Django Web 应用程序中上传图像文件。有一个uploadhtml 模板中的按钮被form标签。一旦upload按钮被按下,底层view接管并处理图像上传。

在我同事 Macbook 的 Chrome 浏览器中,按upload多次确实很快就能多次调用底层函数。我最终得到了大量正在上传的图像副本。

然而,这在我自己环境的 Firefox(Ubuntu 操作系统)中是不可复制的。看来这个问题是浏览器敏感的?

无论如何,我该如何切断这个代码行为呢?如果用户陷入点击狂潮,我不希望出现多个图像。有人可以指导我如何在 Django 中处理这个问题吗?我更喜欢一个non-JS,服务器解决方案也是如此。

注意:如果您需要查看我的相关代码,请告诉我。


很多人都面临这个问题。如果提交按钮调用了 3 次而不等待刷新浏览器,它将添加 3 次。为了防止这种情况,你可以使用 jQuery。

例如,在表单提交上,您可以显示加载程序或禁用提交按钮,

$('#login_form').submit(function() {
    $('#gif').css('visibility', 'visible');
    or
     $('#button').prop('disabled', true);
});

编辑服务器端实现:

从用户界面的角度来看,我不建议这样做,但如果您还可以使用会话或 cookie 进行有效提交。在您的视图中生成随机令牌并将其在表单中设置为隐藏输入。

例如,

def checkform(request):
   form = ExampleForm(request.POST or None)
   randomtoken = #generate random token here and set in session or cookie

   if form.is_valid():
      # check_token here
      session_value == request.POST.get('your_hidden_token')
      # if matched than change the random token and save your data else do your restriction processing
   render ( request,'template.html',context={ 'form':form,'randomstring':randomstring } )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

停止通过疯狂的按钮点击生成的多个视图调用(Django 应用程序) 的相关文章

随机推荐