drf 视图类、视图集、路由

发布时间 2023-09-05 17:28:41作者: 凡人半睁眼

一、视图类

1、写 publish: 查询所有,查询单条,修改一条,新增一条,删除一条的接口

class PublishView(ListCreateAPIView):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer

class PublishDetailView(RetrieveUpdateDestroyAPIView):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer

2、写 publish 查询单条,新增一条的接口--->使用9个视图子类编写

class PublishView(CreateAPIView):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer

class PublishDetailView(RetrieveAPIView):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer

3、写 publish: 查询单条,新增一条,的接口--->使用5个视图扩展类+GenericAPIView

class PublishView(GenericAPIView,CreateModelMixin):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer
    def post(self,request,*args,**kwargs):
        return self.create(request,*args,**kwargs)

class PublishDetailView(GenericAPIView,RetrieveModelMixin): queryset = Publish.objects.all() serializer_class = PublishSerializer def get(self,request,*args,**kwargs): return self.retrieve(request,*args,**kwargs)  

二、视图集

1、ModelViewSet

只要视图类继承了它,路由写法改一下,5个接口都有了

from rest_framework.viewsets import ModelViewSet

class PublishView(ModelViewSet):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer

class PublishDetailView(ModelViewSet):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer

2、修改路由

在路由.as_view()中:写一个字典,请求方法对应接口增删改查方法

urlpatterns = [
    path('publishs/', PublishView.as_view({'get': 'list', 'post': 'create'})),  
    path('publishs/<int:pk>', PublishDetailView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
] 

3、ModelViewSet源码分析

 

 

 

 

三、路由

1、

2、

3、