Rest Framework之视图
视图
a.以前写的视图
class TestView(View):
pass
b.后来写的视图
class TestView(APIView): # View
pass
c.不怎么用的视图方法,继承GenericAPIView
1 from api.utils.serializsers.pager import PagerSerialiser 2 from rest_framework.generics import GenericAPIView 3 4 5 class Test1View(GenericAPIView): # APIView 6 queryset = models.UserInfo.objects.all() 7 serializer_class = PagerSerialiser 8 pagination_class = PageNumberPagination 9 10 def get(self, request, *args, **kwargs): 11 # 获取数据 12 userinfo = self.get_queryset() 13 # 分页处理 14 pager_userinfo = self.paginate_queryset(userinfo) 15 # 序列化 16 ser = self.get_serializer(instance=pager_userinfo, many=True) 17 return Response("...")
d.继承GenericViewSet,这个类继承了ViewSetMixin,generics.GenericAPIView。
此方法类中ViewSetMixin中,重写了as_view方法,
在URL中as_view必须要传递参数例如:{"get":"list"}
意思是修改了method的调用的方法,不再根据请求的method来执行方法。
1 class Test1View(GenericViewSet): 2 queryset = models.UserInfo.objects.all() 3 serializer_class = PagerSerialiser 4 pagination_class = MyPageNumberPagination 5 6 def list(self, request, *args, **kwargs): 7 # 获取数据 8 userinfo = self.get_queryset() 9 # 分页处理 10 pager_userinfo = self.paginate_queryset(userinfo) 11 # 序列化 12 ser = self.get_serializer(instance=pager_userinfo, many=True) 13 return Response(ser.data)
e.继承ModelViewSet,这个类继承了mixins中的
增CreateModelMixin、查ListModelMixin(多条数据)
(根据ID的单条数据操作)删DestroyModelMixin、改UpdateModelMixin、查RetrieveModelMixin
以及GenericViewSet类。
1 class Test1View(ModelViewSet): 2 queryset = models.UserInfo.objects.all() 3 serializer_class = PagerSerialiser 4 pagination_class = MyPageNumberPagination
继承的类越多,提供的功能越多,需要写的代码越少
需要注意的是,在URL中就有了变化
1 re_path('(?P<version>[v1|v2]+)/Test1View/$', views.Test1View.as_view({'get': 'list', "post":"create"})), 2 re_path('(?P<version>[v1|v2]+)/Test1View/(?P<pk>\d+)$', views.Test1View.as_view({'get': 'retrieve', "delete": "destroy","put": "update","patch": "partial_update"})),
注意:这里能够执行的增删改查等操作都是简单的单表操作。

浙公网安备 33010602011771号