zoukankan      html  css  js  c++  java
  • rest_framework-08-视图

    rest_framework-08-视图

     请求方式:

    视图

    1.GenericAPIView  # 视图
    2.GenericViewSet # 视图 劣势:指向同一个视图,get无法区分是查询单个对象还是所有数据。
    3.ModelViewSet # 视图 最强大:增、删、改、查、局部更新6个方法。
    
    

    总结:
    a. 增删改查 ModelViewSet 最强大:增、删、改、查、局部更新6个方法。
    b. 增删 CreateModelMixin,DestroyModelMixin,  GenericViewSet
    c. 复杂逻辑 GenericViewSet 或 APIView

    # =================================================================GenericAPIView  # 视图

    1.urls.py

     

    2.视图

     

    运行结果:

    3.视图类

     

    4.源码。继承了APIview

     

    部分方法:

    5.views.py

     

    运行结果:

    总结:

        2. 视图
            a. 过去 
                class Pager1View(View):
                    pass
                    
            b. 现在 
                class Pager1View(APIView): # View
                    pass
            
            c. 无用
                from rest_framework.generics import GenericAPIView  # 视图
                from api.utils.serializers.pager import PagerSerializers  # 序列化
                from rest_framework.response import Response # 渲染器
                from rest_framework.pagination import PageNumberPagination # 分页
    
                class View1View(GenericAPIView):
                    queryset = models.Role.objects.all()  # 所有数据集合
                    serializer_class = PagerSerializers  # 序列化对象
                    pagination_class = PageNumberPagination # 分页对象
    
                    def get(self, request, *args, **kwargs):
                        roles = self.get_queryset()  # 拿到所有的数据集合
                        pager_roles = self.paginate_queryset(roles)  # 进行分页 拿到某一部分数据
                        ser = self.get_serializer(instance=pager_roles,many=True) # 获取序列化的数据
                        return Response(ser.data)  # 渲染器
    #===================================================================GenericViewSet  # 视图

     d:GenericViewSet # 视图

    1.源码:继承

     

     2.views.py

     

     运行报错:

    少传了参数

    3.urls.py 视图必须传参 views.View1View.as_view({'get': 'list'}))

     

    说明ViewSetMixin类下重写了as_view方法

     查看源码:

    4.get请求执行list方法

     

    运行结果:

    5.还可以写其他请求。根据请求方式不同,执行对应的方法。

     

    注意:urls.py路径上传了的方法,视图上必须写该的方法,否则会报错。

    6.功能和c类GenericAPIView  视图类一样。给一下函数名即可。

      

    运行结果:

    小结:

            d. GenericViewSet(ViewSetMixin, generics.GenericAPIView):
                    
                路由:
                    url(r'^(?P<version>[v1|v2]+)/v1/$', views.View1View.as_view({'get': 'list'})),
                
                视图:
                    from api.utils.serializsers.pager import PagerSerialiser
                    from rest_framework.viewsets import GenericViewSet
    
                    class View1View(GenericViewSet):
                        queryset = models.Role.objects.all()
                        serializer_class = PagerSerialiser
                        pagination_class = PageNumberPagination
    
                        def list(self, request, *args, **kwargs):
                            # 获取数据
                            roles = self.get_queryset()  # models.Role.objects.all()
    
                            # [1, 1000,]     [1,10]
                            pager_roles = self.paginate_queryset(roles)
    
                            # 序列化
                            ser = self.get_serializer(instance=pager_roles, many=True)
    
                            return Response(ser.data)
                            
    #===================================================================ModelViewSet  # 视图

    1.ModelViewSet 类  源码:

     2.ListModelMixin源码:

    3.

    运行结果:

    4.增加一个post请求

    运行结果:

     增加一条数据

    增加一条数据后,返回的结果:

    5.CreateModelMixin源码:

     

    6.get请求查单条数据,需要传id.

    RetrieveModelMixin类下的retrieve方法。

     

    7.删除单条数据,都需要传id.

     

    8.更新单条数据,都需要传id.

     9.urls.py

     10.views.py:写了4行代码就实现了所有功能。

    11.运行结果:查

    12.运行结果:删

    返回值:

     代码:ModelViewSet # 视图

                            
            e. 
                路由系统:
                    url(r'^(?P<version>[v1|v2]+)/v1/$', views.View1View.as_view({'get': 'list','post':'create'})),
                    url(r'^(?P<version>[v1|v2]+)/v1/(?P<pk>d+)/$', views.View1View.as_view({'get': 'retrieve','delete':'destroy','put':'update','patch':'partial_update'})),
    
                视图:
                    from api.utils.serializsers.pager import PagerSerialiser
                    from rest_framework.viewsets import GenericViewSet,ModelViewSet
                    from rest_framework.mixins import ListModelMixin,CreateModelMixin
    
                    class View1View(ModelViewSet):
                        queryset = models.Role.objects.all()
                        serializer_class = PagerSerialiser
                        pagination_class = PageNumberPagination


  • 相关阅读:
    计算机组成原理实验总结
    Matlab图像匹配问题
    局域网实验
    信号量与共享存储区(操作系统实验三)
    路由器配置及IP设置及ping命令使用
    自我介绍是一门学问
    数据库管理系统的维护与管理
    高数讲课教后感
    node Unexpected token import(node 目前默认不支持es6 的模块 import解决方法有2)
    Cookie/Session机制详解
  • 原文地址:https://www.cnblogs.com/yimiflh/p/9280928.html
Copyright © 2011-2022 走看看