【发布时间】:2021-06-18 14:40:24
【问题描述】:
我正在使用 Django Rest Framework for API,我遇到了这个问题。在views.py 中,我的类继承自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
【问题讨论】:
-
你需要使用
PUT或PATCH -
PUT不起作用,抛出错误:PUT 127.0.0.1:8000/api/software/3 400 (Bad Request) -
PATCH工作,感谢您的帮助!
标签: python django django-rest-framework django-rest-viewsets