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

为何调用DELETE方法却返回‘Method "GET" not allowed’错误?

请求DELETE接口却收到"Method 'GET' not allowed"错误的原因排查

下面是几种最可能的原因和对应的解决办法:

  • 实际发送的是GET请求
    别光看自己选了DELETE,先确认请求真的是DELETE方法:

    • 浏览器直接输URL访问的话,默认就是GET请求,肯定会被拒绝,必须用Postman、curl这类工具发DELETE请求
    • 检查前端代码或者请求工具的配置,是不是不小心把Method选成了GET,比如Postman里下拉框是不是真的选了DELETE
  • URL末尾缺斜杠导致重定向成GET
    你的URL配置里是delete/user/<str:username>/(末尾带斜杠),如果请求的URL没带斜杠(比如http://xxx/delete/user/test),Django会自动做301重定向到带斜杠的地址,而重定向后的请求方法会变成GET,自然触发错误。
    解决:要么确保请求URL末尾带上斜杠,要么在Django的settings.py里把APPEND_SLASH设为False(不推荐,可能影响其他接口的路由匹配)

  • CSRF验证引发的间接问题(仅针对session认证场景)
    如果你的接口依赖Django的session认证(比如登录后用浏览器请求),DRF的APIView会强制检查CSRF Token。如果请求里没带正确的CSRF Token,有些情况下前端会自动把请求改成GET重试,就会出现这个错误。
    解决:如果是前后端分离的纯API接口,建议改用Token或JWT认证,关闭CSRF验证;如果必须用session认证,要在请求头里带上X-CSRFToken,值从浏览器的cookie中获取。

另外给个小建议:你的视图里用filter删除用户,如果用户不存在的话不会抛异常,会默默执行delete但没效果,改成get能更精准处理用户不存在的情况:

def delete(self, request, username):
    try:
        instance = User.objects.get(username=username)
        instance.delete()
        return HttpResponse("Success")
    except User.DoesNotExist:
        return Response({'error': '用户不存在'}, status=status.HTTP_404_NOT_FOUND)
    except Exception as e:
        return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

内容的提问来源于stack exchange,提问作者Quý Nguyễn Hoàng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:40:04