我正在創建一個 api,但不知道為什么在任何 url 上都不允許使用 post 方法。
意見
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)
聊天網址
urlpatterns = [
path("<str:pk>/", ChatDetail.as_view()),
path("messages/", MessagesView.as_view()),
]
回復
{
"detail": "Method \"POST\" not allowed."
}
我正在為請求提供令牌,所以isAuthenticated這里沒有做錯任何事情。
uj5u.com熱心網友回復:
如果您訪問 ,您的第一個模式將觸發messages/。事實上,它的<str:pk>引數匹配任何字串(至少有一個字符且沒有斜線)。但messages因此也與這種觀點相吻合。
您可以做的是交換兩個網址的位置,然后呼叫messages/將觸發正確的視圖:
urlpatterns = [
# ↓ messages first
path('messages/', MessagesView.as_view()),
path('<str:pk>/', ChatDetail.as_view()),
]
如果pk是整數,則可以pk使用<int:…>路徑轉換器進一步限制:
urlpatterns = [
path('messages/', MessagesView.as_view()),
path('<int:pk>/', ChatDetail.as_view()),
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329441.html
標籤:http 邮政 Django 休息框架 django-views
