1

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

4

3 回答 3

2

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

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

于 2013-09-27T22:55:06.687 回答
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);
}

更多信息在这里

于 2013-09-27T23:10:25.870 回答
1

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

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

您希望 Django 不计算同一视图上的两个连续调用。

问题是:

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

  • 即使您确实使用了一些技巧来完成上述部分,下一个问题将是区分来自不同用户的请求(针对该视图)。您将如何区分它们以确定特定用户的“连续性”?

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

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

客户端,一键点击!禁用。非常快,您在池中有请求。

做这部分很容易。有关更多信息,请参阅这些链接:

如何使用 JavaScript 禁用 html 按钮?

使用 jQuery 禁用/启用输入?

于 2013-09-27T23:25:45.530 回答