django rest框架post方法不允许



我正在创建一个api,不知道为什么post方法不允许任何url。

观点

class MessagesView(APIView):
permission_classes = (IsAuthenticated,)
def post(self, request):
serializer = MessageSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

chat.urls

urlpatterns = [
path("<str:pk>/", ChatDetail.as_view()),
path("messages/", MessagesView.as_view()),
]

反应

{
"detail": "Method "POST" not allowed."
}

我正在为请求提供令牌,因此isAuthenticated在这里没有做任何错误。

如果访问messages/,您的第一个模式将被触发。事实上,它的<str:pk>参数匹配任何字符串(至少有一个字符,没有斜杠)。因此,messages也符合这个观点。

你可以做的是交换两个url的位置,然后调用messages/将触发正确的视图:

urlpatterns = [
#       ↓ messages first
path('messages/', MessagesView.as_view()),
path('<str:pk>/', ChatDetail.as_view()),
]

如果pk是整数,可以使用<int:…>路径转换器进一步限制pk:

urlpatterns = [
path('messages/', MessagesView.as_view()),
path('<int:pk>/', ChatDetail.as_view()),
]

相关内容

  • 没有找到相关文章

最新更新