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

Django REST Framework Bundle接口:POST请求返回Method Not Allowed问题求助

问题分析:POST请求触发"Method Not Allowed"错误

我基于Django REST Framework开发了一个仅接受POST请求的API,代码如下:

@api_view(["POST"])
@authentication_classes([])
@permission_classes([])
def myapi_v1_result(request):

通过POST按钮发送请求(配图:POST请求测试界面),但收到"Method Not Allowed"错误,日志信息如下:

INFO:     127.0.0.1:49305 - "POST /myapi/v1/result HTTP/1.1" 200 OK
Method Not Allowed: /myapi/v1/result
WARNING:django.request:Method Not Allowed: /myapi/v1/result

可能的原因及排查方向

  • 路由配置冲突:检查urls.py,确认/myapi/v1/result仅绑定了你的DRF视图,没有重复定义或顺序错误导致请求匹配到不支持POST的视图。比如同一个URL被两次注册时,后定义的路由会覆盖前者,若后续路由绑定的是普通Django视图且未允许POST,就会触发错误。
  • 视图函数未完整实现:你的myapi_v1_result函数缺少返回Response对象的逻辑,DRF视图必须返回rest_framework.response.Response实例,否则Django会 fallback 到默认请求处理流程,可能导致方法不允许的错误提示。
  • CSRF验证拦截:如果是通过浏览器表单提交请求,即使关闭了认证和权限,Django默认的CSRF中间件会检查token,缺少token时可能被拦截,表现为方法不允许(可通过Postman/curl直接发POST请求排除此问题)。
  • 中间件干扰:部分自定义或第三方中间件可能修改了请求方法,或对POST请求做了额外校验,导致请求被错误识别。可暂时禁用非必要中间件测试。

快速排查步骤

  1. 检查urls.py中的路由定义,确保path('myapi/v1/result', views.myapi_v1_result)唯一且正确。
  2. 补全视图的响应代码:
from rest_framework.response import Response

@api_view(["POST"])
@authentication_classes([])
@permission_classes([])
def myapi_v1_result(request):
    return Response({"msg": "请求成功"}, status=200)
  1. 用curl测试请求,排除前端表单问题:
curl -X POST http://127.0.0.1:8000/myapi/v1/result
  1. 暂时注释settings.py中的django.middleware.csrf.CsrfViewMiddleware,测试是否为CSRF问题。

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:00:07