我的应用程序中的按钮单击调用一个视图,该视图执行一些数据库更改,然后重定向到呈现html的新视图。当用户通常点击该链接时,他会在几秒钟内意外地点击两次以进行三次。如果在不到10秒之前进行相同的调用,我想阻止视图调用。当然我可以通过检查数据库来做到这一点,但我希望通过在django中使用一些装饰器来获得更快的解决方案。
答案 0 :(得分:2)
点击它后,您应该使用JavaScript禁用该按钮。
这样,用户无法多次触发视图。
答案 1 :(得分: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。
答案 2 :(得分:1)
不,你不能在Django中使用装饰器来做到这一点。
视图文件中的方法应该是在屏幕上显示 。然而,创建模板文件是为了告诉您想要显示的Django 。
你希望Django不计算同一视图上的两个连续调用。
问题是:
“连续”是什么意思?我应该多快点击一次以使其“非连续”?如果我编写一个执行点击的脚本怎么办?你如何定义连续的呢?
即使您使用某些黑客攻击上面的部分,下一个问题是区分来自不同用户(到该视图)的请求。您如何区分它们以确定特定用户的“连续性”?
为什么要进行不必要的更改才能完成所有这些工作?
Django应该和其他东西一起使用。我很难学到这一点。使用Javascript是唯一的方法,没有任何问题。
客户端,只需点击一下即可!禁用。非常快,你在泳池中有要求。
这部分很容易。有关详细信息,请参阅这些链接: