2013-09-27 34 views
1

在我的应用程序中单击按钮调用一个视图,它执行一些数据库更改,然后重定向到呈现html的新视图。当用户通常点击链接时,他会在两秒钟内意外点击两次或三次。如果同一个呼叫在不到10秒钟前完成,我想阻止视图呼叫。当然,我可以通过检查数据库来做到这一点,但我希望通过在django中使用一些装饰器来获得更快的解决方案。Django视图 - 块连续快速调用

回答

2

这应该有所帮助。这是一个JavaScript来禁用点击按钮,在操作完成后启用它。

$(document).ready(function() { 
    $("#btn").on("click", function() { 
     $(this).attr("disabled", "disabled"); 
     doWork(); //this method contains your logic 
    }); 
}); 

function doWork() { 
    alert("doing work"); 
    //actually this function will do something and when processing is done the button is enabled by removing the 'disabled' attribute 
    //I use setTimeout so you can see the button can only be clicked once, and can't be clicked again while work is being done 
    setTimeout('$("#btn").removeAttr("disabled")', 1500); 
} 

更多信息here

+1

感谢您的回答。它工作得很好 –

2

点击它后,您应该使用JavaScript禁用该按钮。

这样用户无法多次触发视图。

1

不,你不能在Django中使用装饰器来做到这一点。

您的视图文件中的方法应该是告诉什么显示在您的屏幕上。而创建模板文件是为了告诉Django 你想如何显示它们

你想让Django在同一视图上不连续计数两次。

的问题是:

  • 你是什么意思的 “连续” 吗?我应该点击多快以使其“不连续”?如果我编写一个脚本来执行点击操作,该怎么办?那么你会如何定义连续的?

  • 即使你确实使用一些黑客做了上面的部分,接下来的问题是要区分来自不同用户(到该视图)的请求。你如何区分它们以确定特定用户的“连续性”?

为什么做不必要的改变来做所有这些事情?

Django应该和其他东西一起使用。我已经学会了这个难题。使用Javascript是唯一的方法,没有任何问题。

客户端,点击一下鼠标!禁用。非常快,你有在池中的请求。

这样做很简单。请参阅以下链接获取更多信息:

How to disable html button using JavaScript?

Disable/enable an input with jQuery?

+0

感谢您的答案 –