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