创建API时遇到Django REST Framework所有URL均提示POST方法不被允许问题求助
排查POST方法不允许的问题
我一眼就发现问题出在URL路由的顺序上!
看你的chat.urls配置:
urlpatterns = [ path("<str:pk>/", ChatDetail.as_view()), path("messages/", MessagesView.as_view()), ]
Django的URL路由是从上到下依次匹配的,当你请求/chat/messages/时,第一个路由<str:pk>/会把messages当作pk参数匹配到ChatDetail视图,根本轮不到MessagesView。如果ChatDetail类没有定义post方法,自然就会返回"POST方法不被允许"的错误。
解决方案
调整URL的顺序,把更具体的路由放在前面:
urlpatterns = [ path("messages/", MessagesView.as_view()), path("<str:pk>/", ChatDetail.as_view()), ]
这样当请求/chat/messages/时,会优先匹配到MessagesView,你的POST请求就能正常进入对应的处理方法了。
验证步骤
- 保存修改后的URL配置
- 重启开发服务器
- 再次发送POST请求到
/chat/messages/,应该就能正常触发MessagesView的post方法了
你也可以顺便确认下ChatDetail视图确实没有实现post方法,但核心问题肯定是路由顺序导致的匹配错误。
内容的提问来源于stack exchange,提问作者kakakakakakakk
相关产品推荐
相关产品推荐

