【问题标题】:Django Views - Block Consecutive Quick CallsDjango 视图 - 阻止连续快速调用
【发布时间】:2013-09-27 22:52:32
【问题描述】:

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

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    这应该会有所帮助。这是一个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】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        问题是:

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

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

        为什么要进行不必要的更改来完成所有这些工作?

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

        客户端,一键搞定!禁用。非常快,并且您在池中有请求。

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

        How to disable html button using JavaScript?

        Disable/enable an input with jQuery?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-04-14
          • 2022-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多