drf的视图分析-drango rest framework 的视图类介绍

一、drf有两大视图类:

1、 APIView  : 

from rest_framework.views import APIView

APIView继承的是原生的view,可操作性很高,但是需要写的代码也多。

2、GenericAPIView :

from rest_framework.generics import GenericAPIView

GenericAPIView 继承的APIView,多了两条命令。模型类表和序列化,使用统一的变量接收了。

queryset =models.User.objects.all()
serializer_class = serializer.UserSerializer

第一个代表的是模型类表

第二个代表的表对应的序列化器的使用

二、五个接口子类:没有都没有继承

ListModelMixin, 查询所有数据

DestroyModelMixin, 删除单个数据

RetrieveModelMixin, 查询单个数据

UpdateModelMixin, 更单个数据

CreateModelMixin,新增单个数据

必须配合:GenericAPIView 或from rest_framework.viewsets import GenericViewSet

区别:

1、GenericAPIView 路由的配置,没有重写as_view()方法,

path('test/',views.Test.as_view()),

2、GenericViewSet内部重写的as_view()方法。可以通过自动生成路由。

from rest_framework import routers
rou = routers.SimpleRouter()
rou.register('test/',views.Test,'别名')
urlpatterns+=rou.urls

想要手动生成路由:path('test/',views.Test.as_view({'get':'retrieve','put':'update','delete':'destroy'})), 这三个请求需要用到数据的id。path('test/',views.Test.as_view({'get':'list','post':'create'})),这两个则不需要数据的id。所以还是使用自动生成最好了。

如何导入五个试图子类:

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

class Test(GenericViewSet,ListModelMixin): #这样实现查询所有数据的接口了,需要什么往里加

        queryset =models.User.objects.all()

         serializer_class = serializer.UserSerializer

三、9个视图拓展类,

ListAPIView : 获取所有数据 继承了 mixins.ListModelMixin, GenericAPIView

ListCreateAPIView :获取所有数据、新增一条数据 

DestroyAPIView :删除一条数据 继承了 mixins.DestroyModelMixin, GenericAPIView

UpdateAPIView:修改一条数据  继承了 mixins.UpdateModelMixin, GenericAPIView

RetrieveUpdateDestroyAPIView:查询单条数据、修改单条数据、删除单条数据

RetrieveAPIView :查询单条数据  继承了 mixins.RetrieveModelMixin, GenericAPIView

RetrieveUpdateAPIView:查询单条数据和修改单条数据

RetrieveDestroyAPIView:查询单条数据和删除单条数据

CreateAPIView:新增单条数据, 继承了 mixins.CreateModelMixin, GenericAPIView

导入:

from rest_framework.generics import

使用:

class Test(ListAPIView):#查询所有数据
    queryset =models.User.objects.all()
    serializer_class =ser.UserSerializer
class Test01(RetrieveAPIView):#查询单条数据
    queryset = models.User.objects.all()
    serializer_class = ser.UserSerializer

url: 

path('test/',views.Test.as_view()),
path('test/<int:pk>/',views.Test01.as_view()),

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值