如何在Django3.1中创建一个基于类的delete视图来允许delete方法?

如何在Django3.1中创建一个基于类的delete视图来允许delete方法?,django,django-class-based-views,http-delete,Django,Django Class Based Views,Http Delete,在Django3.1中,典型的DeleteView接受GET和POST 看 我复制如下: 显示确认页并删除现有对象的视图。仅当请求方法为POST时,才会删除给定对象。如果此视图是通过GET获取的,它将显示一个确认页面,该页面应包含一个发布到同一URL的表单 如何创建一个基于类的视图并接受DELETE方法的DELETEView?Tldr;我选择在服务器端使用303,这样它就可以正确地重定向到列表视图 长话短说就在这里 在这个适用于Spring(Java框架)的答案中,这个问题与我的问题相同 发送删

在Django3.1中,典型的DeleteView接受GET和POST

我复制如下:

显示确认页并删除现有对象的视图。仅当请求方法为POST时,才会删除给定对象。如果此视图是通过GET获取的,它将显示一个确认页面,该页面应包含一个发布到同一URL的表单


如何创建一个基于类的视图并接受DELETE方法的DELETEView?

Tldr;我选择在服务器端使用303,这样它就可以正确地重定向到列表视图

长话短说就在这里

在这个适用于Spring(Java框架)的答案中,这个问题与我的问题相同

  • 发送删除
  • 然后服务器端希望使用302重定向
  • 302将使用先例方法,列表通常不接受删除作为先例方法。仅使用POST、GET和HEAD作为先例方法
  • 这似乎是一个web框架问题。但事实并非如此。这似乎是大多数明智的web框架所采用的惯例

    有3种解决方案存在缺点:

    1.凌驾于公约之上 允许后端web框架接受删除作为302的先决方法

    缺点:按惯例不太好

    2.让客户端处理重定向 发送回200,然后客户端将重定向回列表视图

    缺点:这会导致两个请求,htmx delete不能以这种方式工作。它将发送一个DELETE方法请求,然后获取返回的任何内容并立即交换。我喜欢这个,所以我想保留这个。解决这一问题的请求是一个,而不是两个

    3.使用303进行重定向 成功删除后,执行303重定向到列表视图(我选择了此选项)

    缺点:303不适用于HTTP/1.0和更早版本的浏览器。但到2021年,这不是问题,今后问题将继续减少

    最后我写了自己的观点

    来自django.views.generic.detail import BaseDetailView的
    
    类DeleteThingView(BaseDetailView):
    http_方法_名称=[“删除”]
    模型=事物
    def删除(self、request、*args、**kwargs):
    self.object=self.get_object()
    self.object.delete()
    response=重定向(反向(“事物列表”))
    response.status_code=303
    返回响应
    
    请检查这一条谢谢,但真正的问题是,按照惯例,大多数web框架不允许302使用DELETE作为先例方法