django rest framework post 方法不允许

django rest framework post method not allowed

我正在创建一个 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('<b><int:</b>pk><b>/</b>', ChatDetail.as_view()),
]