Django视图 - 阻止连续快速调用

时间:2013-09-27 22:52:32

标签: python django django-views

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

3 个答案:

答案 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是唯一的方法,没有任何问题。

客户端,只需点击一下即可!禁用。非常快,你在泳池中有要求。

这部分很容易。有关详细信息,请参阅这些链接:

How to disable html button using JavaScript?

Disable/enable an input with jQuery?