2012-03-03 18 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