2013-09-27 35 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

感謝您的答案 –