Django通用apiview中CRUD操作的API端点相同

mfuanj7w  于 2023-02-17  发布在  Go
关注(0)|答案(2)|浏览(109)

我一直在为不同的请求创建不同的API端点,例如在通用apiview中为get、post、delete和update创建一个单独的api。但是我的前端开发人员告诉我这是一个非常糟糕的做法,我需要为所有这4个请求创建一个单独的api。当我在文档中查找时,有一个ListCreateApiView用于列出和创建一个对象,但是我不能用它来删除和更新。我怎么能把这两个包含在一个端点中呢?我不使用模型集视图和功能视图。我主要使用通用的API视图。

piok6c0g

piok6c0g1#

你试过rest framework的ModelViewSet吗?
即:

from rest_framework.viewsets import ModelViewSet

它拥有所有的mixin(CRUD),您可以在API视图中从它继承。或者您可以根据您的需求添加这些mixin:

from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin

你可以分别继承它们。例如:

Class SomeView(CreateModelMixin, DestroyModelMixin, GenericViewSet):
    pass

它有创建和删除的能力。你也可以使用GenericAPIView的mixin:

Class SomeView(CreateModelMixin, DestroyModelMixin, GenericAPIView):
    pass
qjp7pelc

qjp7pelc2#

实现这一点最简单的方法之一是使用泛型视图。
只需将此导入添加到您的views.py即可:

from rest_framework import generics
from .serializers import modelnameSerializer
from .model import modelname

接下来是基于类的视图,这个视图用于列出您选择的模型中的所有项目

class yourmodelnameList(generics.ListCreateAPIView):
    queryset = modelname.objects.all()
    serializer_class = modelnameSerializer

此视图用于更新、删除和检索:

class modelnameDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = modelname.objects.all()
    serializer_class = modelnameSerializer

urls.py中,只需添加:

path('yourulchoice/',views.modelnameList.as_view()),
path('yourulchoice/<int:pk>/', views.modelnameDetail.as_view()),

其他注意事项:

  • django rest框架已安装。
  • 确保将rest_framework添加到settings.py文件的INSTALLED_APPS中。

这两个url路由应该能够处理您的CRUD需求。

相关问题