• Django rest-framework框架-组件之视图


    视图:
       a. django 
          class Test(View):
          	...
       b. rest_framework
          class Test(APIView):
          	...
       c. GenericAPIView 一般不用这个类来做视图
    
    from rest_framework.generics import GenericAPIView
    class ViewView(GenericAPIView):
    	queryset = models.Role.objects.all()
    	serializer_class = PagerSerializer
    	pagination_class = PageNumberPagination
    
    	def get(self,reuqest,*args,**kwargs):
    		#获取数据  models.Role.objects.all()
    		roles = self.get_queryset() 
    		pager_roles = self.paginate_queryset(roles)
    		#序列化
    		self.get_serializer(instance=pager_roles,many=True)
    		return Response(ser.data)
          		
       d. GenericViewSet(ViewSetMixin, generics.GenericAPIView) 继承两个父类
    
    #需要路由传参数  url(r'^(?P<version>[v1|v2]+)/v1/$',views.ViewView.as_view({'get':'list','post':'post_list'})),
    #参数传递给 ViewView get方法执行list  post方法执行post_list
    from rest_framework.viewsets import GenericViewSet
    class ViewView(GenericViewSet):
    	  def list(self,request,*args,**kwargs):
    	  return Response('GET')
    	  def post_list(self,request,*args,**kwargs):
    	  return Response('POST')
    
       e. ModelViewSet(
       			mixins.CreateModelMixin,
       			mixins.RetrieveModelMixin,
       			mixins.updateModelMinxin,
       			mixins.DestroyModelMinxin,
       			mixins.ListModelMixin,
       			GenericViewSet)
    
    #需要路由传参数  url(r'^(?P<version>[v1|v2]+)/v1/(?P<pk>d+)/$',views.ViewView.as_view({'get':'retrieve','delete':'destroy','put':'update','patch':'partial_update'})),
    # 继承ModelViewSet 所有的 增删改查的功能都有了 
    # 如果是get请求  retrieve获取单条数据 根据传的参数pk来查询  
    # 如果是delete请求  destroy删除数据  
    # 如果是put请求  update更新数据
    # 如果是patch请求  partial_update 部分更新数据
    # list 查询所有数据
    # create 增加数据
    # 需要关注路由系统 {'get':'retrieve','delete':'destroy','put':'update','patch':'partial_update'} {'get':'list','post':'post_list'}
    from rest_framework.viewsets import ModelViewSet
    class ViewView(ModelViewSet):
    	  queryset = models.Role.objects.all()
    	  serializer_class = PagerSerializer
    	  pagination_class = PageNumberPagination
    
    总结:
        - 大部分使用 APIView
        - 也可以使用 GenericViewSet 在路由中区分get,post
        - 基本的增删改查实现 继承 ModelViewSet
        - 增删 继承GenericViewSet, CreateModelMixin,DestroyModelMinxin
        - 复杂逻辑 继承GenericViewSet 或者 APIView
    

      

  • 相关阅读:
    ie6bug,element name 与 id不能相同
    鼠标的当前位置
    setAttribute在设置属性 ieBug
    【STM32 .Net MF开发板学习14】红外遥控器编码识别
    NETMF Versions 4.1 Release 发布
    【STM32 .Net MF开发板学习11】步进电机控制(非PWM模式)
    【STM32 .Net MF开发板学习10】SPI测试之触摸屏坐标获取
    【STM32 .Net MF开发板学习08】远程PLC读写控制
    【STM32 .Net MF开发板学习09】AD模拟量采集
    农村个人医疗远程助理(物联网应用)
  • 原文地址:https://www.cnblogs.com/kuku0223/p/11352468.html
Copyright © 2020-2023  润新知