我正在创建一个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()),
]