代码之家  ›  专栏  ›  技术社区  ›  alias51

在Django源代码中,post()方法对DeletionMixin做了什么?

  •  0
  • alias51  · 技术社区  · 6 年前

    我正在学习Django,并试图理解它 DeleteView 来自第一校长。

    source code 对于 DeletionMixin 两者都有一个共同点 delete 方法和步骤 post 方法:

    class DeletionMixin:
        """Provide the ability to delete objects."""
        success_url = None
    
        def delete(self, request, *args, **kwargs):
            """
            Call the delete() method on the fetched object and then redirect to the
            success URL.
            """
            self.object = self.get_object()
            success_url = self.get_success_url()
            self.object.delete()
            return HttpResponseRedirect(success_url)
    
        # Add support for browsers which only accept GET and POST for now.
        def post(self, request, *args, **kwargs):
            return self.delete(request, *args, **kwargs) 
    

    这两种方法的区别是什么?它们在什么时候被调用?

    是吗 delete() 方法仅在 request.GET ?

    如果 删除() 方法也定义在 models.Model 类执行不同的操作,重写 删除mixin 在视野里还是别的什么?

    例如:

    class MyModel(models.Model):
        def delete(self):
            ...
            return
    

    你能帮我理解一下在什么时候发生的事情的逻辑“工作流程”吗 删除视图 被称为。

    相关类结构如下:

    class BaseDeleteView(DeletionMixin, BaseDetailView):
        pass
    
    
    class DeleteView(SingleObjectTemplateResponseMixin, BaseDeleteView):
        template_name_suffix = '_confirm_delete'
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Dharman vijay    6 年前

    这意味着DeletionMixin只响应“delete”或“post”Http方法。

    根据定义: https://www.w3schools.com/tags/ref_httpmethods.asp

    HTTP方法有GET、POST、PUT、HEAD、DELETE、PATCH和OPTIONS

    收到 用于从指定资源请求数据。

    邮递 用于向服务器发送数据以创建/更新资源。

    删去 方法删除指定的资源。

    因此 收到 方法不用于创建/更新或删除操作。。 这就是为什么DeletionMixin没有实现GET请求的方法。

    换句话说,为了删除某些内容,你必须使用 邮递 删去 请求中的http方法。大多数时候,你会使用帖子。

    推荐文章