zoukankan      html  css  js  c++  java
  • Django:RestFramework之-------视图

    10.视图

    • GenericAPIView封装一些方法,将这些方法返回值放在类变量位置上.

    1.GenericAPIView视图示例:不怎么用

    from api.utils.serializers.pager import PagerSerialiser
    from rest_framework.generics import GenericAPIView
    
    class VView(GenericAPIView):
        #获取模型类
        queryset = models.Role.objects.all()
        #序列化器
        serializer_class = PagerSerialiser
        #分页设置
        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)
    
    

    2.GenericViewSet视图类

    • 实现自定义路由执行函数
    #urls.py
    #get方法过来执行VView get请求执行list方法. post请求执行tijiao
    url(r'^(?P<version>[v1|v2]+)/vview/$', views.VView.as_view({"get":"list","post":"tijiao"}),),
    #视图函数:
    from rest_framework.viewsets import GenericViewSet
    class VView(GenericViewSet):
        #获取模型类
        queryset = models.Role.objects.all()
        #序列化器
        serializer_class = PagerSerialiser
        #分页设置
        pagination_class = PageNumberPagination
        def list(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)
        def tijiao(self,request,*args,**kwargs):pass
        
    

    3.ListModelMixin 封装get请求

    4.CreateModelMixin 自带post请求

    #urls.py
    url(r'^(?P<version>[v1|v2]+)/vview/$', views.VView.as_view({"get":"list","post":"create"}),),
    #GenericViewSet自定义request.methods处理方法,在url上设置
    #视图函数:
    from rest_framework.viewsets import GenericViewSet
    from rest_framework.mixins import ListModelMixin,CreateModelMixin
    class VView(ListModelMixin,CreateModelMixin,GenericViewSet):
        #获取模型类
        queryset = models.Role.objects.all()
        #序列化器
        serializer_class = PagerSerialiser
        #分页设置
        pagination_class = PageNumberPagination
    

    5.ModelViewSet

    • 让你的代码变得简单舒服
    • ModelViewSet继承了前面所有类的功能
    #urls.py
    #设置{"get":"list"}  内置封装好了方法返回所有数据
    url(r'^(?P<version>[v1|v2]+)/vview/$', views.VView.as_view({"get":"list"}),),
    url(r'^(?P<version>[v1|v2]+)/vview/(?P<pk>d+)/$', views.VView.as_view(
            {"get":"retrieve","delete":"destroy","put":"update","patch":"partial_update"}),
            ),
    """
    "get":"retrieve"    获取单个数据   访问URL:http://127.0.0.1:8000/api/v1/vview/2/
    "delete":"destroy"   删除单个数据
    "put":"update"       更新一条数据
    "patch":"partial_update"   修改一条数据
    """
    
    from rest_framework.viewsets import ModelViewSet
    class VView(ModelViewSet):
        #获取模型类
        queryset = models.Role.objects.all()
        #序列化器
        serializer_class = PagerSerialiser
        #分页设置
        pagination_class = PageNumberPagination
    
    
    • 显示效果

    6.总结

    1.基本增删改查用ModelViewSet
    2.只有增删   CreateModelMixin,DestroyModelMixin,GenericViewSet
    3.复杂增删改查,可以使用GenericViewSet  或 APIView
    
    • 知识拓展

      GenericViewSet.get_object  只有调用get_object
      	check_object_permissions  用于判断你这个用户对这个对象是否有调用权限.
      	
      	
      	has_object_permission  才会生效此方法
      
  • 相关阅读:
    linux基础命令:alias
    linux基础命令:find
    Linux下which、whereis、locate命令的区别
    逆元知识普及(进阶篇) ——from Judge
    BZOJ 3620: 似乎在梦中见过的样子
    HDU contest808 ACM多校第7场 Problem
    P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?LCT?...FAQ orz
    可持久化数组(线段树)[模板题]
    可持久化并(xian)查(duan)集(shu)
    主席树(静态)的轻松入门
  • 原文地址:https://www.cnblogs.com/xujunkai/p/11850002.html
Copyright © 2011-2022 走看看