2012-03-03 37 views
4

我正在切換到基於類的視圖。我也使用JavaScript來確認客戶端的任何刪除。 Django DeleteView需要一個我不關心的刪除確認模板。Django基於類的視圖 - DeleteView - 如何禁用確認要求

是否有任何簡單的方法來禁用Django的任何類型的刪除確認?

class EntryDeleteView(DeleteView): 
    model = Entry 
    success_url = reverse_lazy('entry_list') # go back to the list on successful del 
    template_name = 'profiles/entry_list.html' # go back to the list on successful del 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(EntryDeleteView, self).dispatch(*args, **kwargs) 
+0

將此添加到刪除視圖允許通過get進行刪除,但我將使用後解決方案。 [def get(self,* args,** kwargs):return self.delete(* args,** kwargs)] – un33k 2012-03-03 02:20:14

回答

7

您應該從客戶端(使用AJAX或發佈表單)進行POST查詢。這是因爲如果您允許通過GET刪除某些內容,那麼您的服務將很容易受到CSRF的影響。有人會通過電子郵件或其他方式將您的管理員發送給您,並且您將遇到麻煩。

+0

我對所有刪除都要求登錄,這不夠嗎? – un33k 2012-03-03 01:58:43

+7

不,看:我是邪惡的黑客,我知道您網站的管理員的電子郵件。我給他發送了一個帶有可愛的小貓圖片的鏈接,並在頁面上添加了像這樣的內容。管理員查看小貓,並刪除他的整個配置文件。瀏覽器不允許在其他站點上POST,並且Django具有一些CSRF保護,所以這對POST不起作用,這就是爲什麼delete需要POST。 – ilvar 2012-03-04 02:01:41

+2

ilvar忘記提及的是,管理員可能會在他自己的站點上有一個活動的登錄會話,從而繞過登錄步驟。 – anttikoo 2012-04-26 14:02:30

1

的​​呈現在GET確認頁面,如果你使用一個POSTDELETE刪除對象。如果你的JS在確認後對url做了POST,它應該可以像你想要的那樣工作。

+0

是的,我可以讓js在確認後發送帖子。 – un33k 2012-03-03 01:58:03