Django REST Framework接口返回POST方法不允许错误如何解决?
报错
{"detail":"Method \"POST\" not allowed."}解决方案 排查修复步骤
- 优先检查请求URL与路由的匹配规则:你的路由配置为
products/create/带末尾斜杠,如果发起请求时URL没有带末尾斜杠,Django默认会触发301重定向到带斜杠的地址,重定向过程中POST请求会自动转为GET请求,就会触发该报错。解决方法二选一:- 发起请求时严格使用带末尾斜杠的URL
- 调整路由定义去掉末尾斜杠,和请求地址保持一致:
# urls.py 修改示例 path('products/create',views.createProduct , name='product-create'), - 检查路由优先级:如果urls.py中
products/create/路由前面存在类似products/<int:pk>/的动态参数路由,请求会先命中动态路由,若动态路由对应的视图不支持POST方法也会返回该报错,把静态路由放在动态参数路由之前即可。 - 验证权限校验逻辑:你当前使用了
IsAdminUser权限类,若请求没有携带有效的管理员身份凭证(如管理员用户的session、认证token),部分场景下会触发方法不允许报错。可以临时注释@permission_classes([IsAdminUser])装饰器测试,若请求正常返回,说明需要调整请求的认证逻辑,补充正确的管理员身份信息。 - 确认请求方法是否正确:可以在视图首行新增
print(request.method),查看后台实际收到的请求方法,如果打印结果为GET,说明你的请求发起端配置错误,实际没有发送POST请求。
内容的提问来源于stack exchange,提问作者venkatesh boyapally
相关产品推荐
相关产品推荐

