You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF中使用GET请求访问删除接口出现405 Method Not Allowed错误的原因及解决办法

DRF中使用GET请求访问删除接口出现405 Method Not Allowed错误的原因及解决办法

嘿,我一眼就看出问题在哪了!你遇到的这个405错误,核心原因就是你用错了请求方法,下面给你掰扯清楚:

为什么会报错?

  1. DRF的DestroyAPIView默认规则:这个视图类本身就只允许DELETE和OPTIONS请求,这是它的内置限制——毕竟按照RESTful的设计规范,删除资源就该用DELETE方法,GET是用来获取资源的,两者语义完全不同。哪怕你自己重写了delete方法,它的父类已经把允许的请求方法锁死了,GET请求根本进不来。
  2. 浏览器直接访问的本质:你在Django Rest Web Browser里直接输入URL回车,这本质是发送了一个GET请求,而你的接口只认DELETE,所以服务器直接返回405告诉你“这个方法我不认”。

怎么解决?

根据你的需求,给你两个方向的方案:

方案一:用正确的请求方法测试(推荐,符合规范)

  • 如果你用DRF自带的API调试界面:找到这个删除接口的页面后,看页面右上角的请求方法下拉框,把它从GET改成DELETE,然后点击提交按钮就行。注意要先确保你已经登录了(因为你设置了permission_classes = [IsAuthenticated]),不然会先跳转到登录页面。
  • 如果你用命令行或者调试工具:比如用curl命令发送DELETE请求,示例如下(记得替换成你的实际域名,还要带上认证信息,比如token):
    curl -X DELETE -H "Authorization: Token your-auth-token" http://localhost:8000/classroom/delete/1/
    
    或者用Postman这类可视化工具,选择DELETE方法,输入URL,加上必要的认证头,再发送请求就行。

方案二:强行让接口支持GET请求(不推荐,仅作应急参考)

如果你非要用GET请求来触发删除逻辑(真的不建议这么做,会破坏接口语义),可以这么改你的视图类:

class ClassroomDeleteViewAPI(generics.DestroyAPIView):
    serializer_class = ClassroomSerializer
    permission_classes = [IsAuthenticated]
    # 新增允许GET请求
    allowed_methods = ['DELETE', 'GET', 'OPTIONS']

    def get_queryset(self):
        return Classroom.objects.filter(teacher_assigned=self.request.user)

    def delete(self, request, pk):
        try:
            classroom = Classroom.objects.get(pk=pk)
            classroom.delete()
            return Response(status=status.HTTP_204_NO_CONTENT)
        except Classroom.DoesNotExist:
            return Response({
                'detail': 'Classroom not found'
            }, status=status.HTTP_404_NOT_FOUND)
    
    # 新增get方法,复用delete的逻辑
    def get(self, request, pk):
        return self.delete(request, pk)

但再次强调,这种做法违背了RESTful的设计原则,会让你的接口语义混乱,后续维护起来容易踩坑,能不用就不用。

另外,你的视图代码和URL配置都是没问题的,就是请求方法用错了,换对方法就正常了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 08:35:36