簡體   English   中英

如何解決方法“POST”不允許 405

[英]How to solve Method “POST” not allowed 405

我正在為 API 使用 Django Rest 框架,我遇到了這個問題。 views.py我的 class 繼承自ModelViewSet ,但由於某種原因它不允許發出POST請求。 對於前端,我使用 React JS 並從那里發出 POST 請求。 最后我收到這樣的錯誤: POST http://127.0.0.1:8000/api/software/3/ 405 (Method Not Allowed)

這是views.py

from rest_framework.viewsets import ModelViewSet

from .serializers import (
    CategorySerializer,
    SoftwareSerializer,
    SoftwareListRetrieveSerializer,
    CategoryDetailSerializer,
    CustomPaginatorSerializer
)
from ..models import Category, Software


class CategoryViewSet(ModelViewSet):

    queryset = Category.objects.all()
    serializer_class = CategorySerializer
    pagination_class = None

    action_to_serializer = {
        "retrieve": CategoryDetailSerializer,
    }

    def get_serializer_class(self):
        return self.action_to_serializer.get(
            self.action,
            self.serializer_class
        )


class SoftwareViewSet(ModelViewSet):

    queryset = Software.objects.all()
    serializer_class = SoftwareSerializer
    pagination_class = CustomPaginatorSerializer

    action_to_serializer = {
        "list": SoftwareListRetrieveSerializer,
        "retrieve": SoftwareListRetrieveSerializer
    }

    def get_serializer_class(self):
        return self.action_to_serializer.get(
            self.action,
            self.serializer_class
        )

這是urls.py

from rest_framework import routers
from .views import CategoryViewSet, SoftwareViewSet

router = routers.SimpleRouter()
router.register('category', CategoryViewSet, basename='category')
router.register('software', SoftwareViewSet, basename='software')

urlpatterns = []
urlpatterns += router.urls

http://127.0.0.1:8000/api/software/3/ ,它看起來像一個數據的細節,細節只能使用PUTPatch ,不允許使用POST方法。

這個錯誤是因為url http://127.0.0.1:8000/api/software/3/正在調用retrieve方法,該方法必須通過GET調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM