我一直在为不同的请求创建不同的API端点,例如在通用apiview中为get、post、delete和update创建一个单独的api。但是我的前端开发人员告诉我这是一个非常糟糕的做法,我需要为所有这4个请求创建一个单独的api。当我在文档中查找时,有一个ListCreateApiView用于列出和创建一个对象,但是我不能用它来删除和更新。我怎么能把这两个包含在一个端点中呢?我不使用模型集视图和功能视图。我主要使用通用的API视图。
piok6c0g1#
你试过rest framework的ModelViewSet吗?即:
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:
GenericAPIView
Class SomeView(CreateModelMixin, DestroyModelMixin, GenericAPIView): pass
qjp7pelc2#
实现这一点最简单的方法之一是使用泛型视图。只需将此导入添加到您的views.py即可:
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中,只需添加:
urls.py
path('yourulchoice/',views.modelnameList.as_view()), path('yourulchoice/<int:pk>/', views.modelnameDetail.as_view()),
其他注意事项:
rest_framework
settings.py
INSTALLED_APPS
这两个url路由应该能够处理您的CRUD需求。
2条答案
按热度按时间piok6c0g1#
你试过rest framework的
ModelViewSet
吗?即:
它拥有所有的mixin(CRUD),您可以在API视图中从它继承。或者您可以根据您的需求添加这些mixin:
你可以分别继承它们。例如:
它有创建和删除的能力。你也可以使用
GenericAPIView
的mixin:qjp7pelc2#
实现这一点最简单的方法之一是使用泛型视图。
只需将此导入添加到您的
views.py
即可:接下来是基于类的视图,这个视图用于列出您选择的模型中的所有项目
此视图用于更新、删除和检索:
在
urls.py
中,只需添加:其他注意事项:
rest_framework
添加到settings.py
文件的INSTALLED_APPS
中。这两个url路由应该能够处理您的CRUD需求。