DRF的视图组件

DRF的视图组件大概分以下几类

两大视图类

  • APIView、GenericAPIView
from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView
'''
APIView继承Django的View
1) View:将请求方式与视图类的同名方法建立映射,完成请求响应
2) APView:除了拥有View的功能之外,还有一些独有的功能
View的功能;
重写as_view禁用csrf认证;
重写dispatch:请求、响应、渲染、异常、解析、三大认证
多了一堆类属性,可以完成视图类的局部配置
'''
# GenericAPIView提供了三个方法:get_object()、get_queryset()、get_serializer()

from rest_framework.generics import GenericAPIView
class StudentGenericAPIView(GenericAPIView):
queryset = models.Student.objects.all() # 取到所有的学生对象,取到的是一个queryset对象,其实用这些工具我们至少都要定义一个queryset和一个serializer_class
serializer_class = serializers.StudentModelSerializer # def get(self, request, *args, **kwargs):
stu_query = self.get_queryset()
stu_ser = self.get_serializer(stu_query, many=True)
return Response(stu_ser.data)

六大视图工具类

  • RetrieveModelMixin, ListModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin五大工具类

  • 六大工具方法:retrieve、list、create、update、partial_update、destroy

  •   from rest_framework import mixins 
    
    

class StudentMixinGenericAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):

queryset = models.Student.objects.all()

serializer_class = serializers.StudentModelSerializer

    def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
```

​

九大工具视图类

  • CreateAPIView, DestroyAPIView, ListAPIView, ListCreateAPIView, RetrieveAPIView, RetrieveDestroyAPIView, RetrieveUpdateAPIView, RetrieveUpdateDestroyAPIView, UpdateAPIView

  •   from rest_framework.generics import CreateAPIView, RetrieveAPIView, ListAPIView, UpdateAPIView, DestroyAPIView
    
      class StudentMixinAPIView(CreateAPIView, RetrieveAPIView, ListAPIView, UpdateAPIView, DestroyAPIView):
    queryset = models.Student.objects.all()
    serializer_class = serializers.StudentModelSerializer
    # url中单查,不一定必须提供主键,下面的定义就是提供一个供查询的唯一键的字段名即可,当然,需要时表中有的字段,或者是外键字段
    lookup_url_kwarg = 'id' # 有删除需求的接口继承DestroyAPIView,重写destroy完成字段删除,但其实这个方法没有太大必要,因为这种删除需求会彻底在库中删除数据,而在生产中我们一般只会给is_delet字段修改值而已,所以不需要这个方法,重写的时候只需要修改is_delete字段就好
    def destroy(self, request, *args, **kwargs):
    pass

两大视图集基类

  • ViewSet, GenerivViewSet

  •   from rest_framework.viewsets import ModelViewSet
    # 实际上ModelViewSet的源码里面是这么定义的,就是直接继承的mixins(视图工具类)里面的各种方法,几乎包含了所有的方法,除此之外还有一个仅用只读的Model视图集,名为ReadOnlyModelViewSet,

class ModelViewSet(mixins.CreateModelMixin,

mixins.RetrieveModelMixin,

mixins.UpdateModelMixin,

mixins.DestroyModelMixin,

mixins.ListModelMixin,

GenericViewSet):

pass

# 该类只继承了单查和群查,所以

class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,

mixins.ListModelMixin,

GenericViewSet):

pass

# 而两大大视图集基类均是继承自ViewSetMixin
class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
'''
可以自定义映射关系的GenericAPIView '''
pass
class ViewSet(ViewSetMixin, views.APIView):
'''
可以自定义映射关系的APIView
'''
pass
'''
ViewSetMixin所完成的主要功能就是重写as_view()和view(),从而在url里面可以这样写映射关系,比如
as_view({
'get':'my_get',
'post':'my_post', })
这样映射关系写过之后,前端发来的url的类型get和post就会映射到视图层的my_get和my_post,这两个方法都是写在View.py的响应方法里面
'''
```

DRF的视图组件的更多相关文章

  1. DRF之视图组件

    不断的优化我们写的程序,是每个程序员必备的技能和职业素养,也是帮助我们成长的非常重要的手段. 使用serializer进行put接口设计 根据规范,PUT接口用来定义用户对数据修改的逻辑,也就是upd ...

  2. DRF之视图组件 三次封装

    1.为什么要进行封装 1.1 在处理表的时候,如果有几十张表都需要增删改查查时,如果每一张表都写这些方法,会让代码显得冗余,所以需要将这些方法进行封装,然后不同的表都去继承这写方法.(这是思路) 1. ...

  3. DRF(5) - 频率组件、url注册器、响应器、分页器

    一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...

  4. drf视图组件、认证组件

    视图组件 1.基本视图 url(r'^publish/$', views.PublishView.as_view()), url(r'^publish/(?P<pk>\d+)/$', vi ...

  5. DRF 视图组件,路由组件

    视图组件  -- 第一次封装   -- GenericAPIView(APIView):    queryset = None    serializer_class = None    def ge ...

  6. 【DRF框架】视图组件

    基于mixins视图类 from rest_framework import mixins # 创建视图 class CreateModelMixin(object) def create(self, ...

  7. DRF视图组件

    DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...

  8. DRF 视图组件

    目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ...

  9. DRF(3) - 序列化组件(GET/PUT/DELETE接口设计)、视图优化组件

    一.序列化组件 基于上篇随笔的表结构,通过序列化组件的ModelSerializer设计如下三个接口: GET 127.0.0.1:8000/books/{id} # 获取一条数据,返回值:{} PU ...

随机推荐

  1. CSS:CSS 图片廊

    ylbtech-CSS:CSS 图片廊 1.返回顶部 1. CSS 图片廊 以下是使用CSS创建图片廊: 图片廊 以下是使用 CSS 创建图片廊: 实例 <div class="res ...

  2. Jquery的Ready方法加载为什么两次?

    Ready方法会调用两次? 查看对应的页面是否存在<iframe src="#" --> 存在iframe加载这个页面的时候,页面就会加载两次. $(document) ...

  3. 1029 Median (25 分)

    1029 Median (25 分)   Given an increasing sequence S of N integers, the median is the number at the m ...

  4. ThreeJS模型展示为黑色,模型出不来

    选取gltf格式时,出现模型为黑色,模型出不来 原因: 我们设计部可能是用maya或者3dmax去做:在模型导出时,没有gltf格式:如果maya或者3dmax导出obj然后导进blender,再导出 ...

  5. Django的日常-数据传输

    目录 Django的日常-1 Django中最常用的三个东西 HTTPresponse render redirect 静态文件相关 form表单的get与post 神奇的request 模板的传值方 ...

  6. 用JS获取地址栏参数的方法(转)

    方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) {      var reg = new RegExp("( ...

  7. 净心诀---python3生成器进阶

    列表推导式 把需要用一个函数写成的小功能,利用一行表达式完成 例子: l = [1,2,3,4,5] # 所有的偶数都放到新的列表中 # 正常函数 def Lst(): li = [] for i i ...

  8. XVIII Open Cup named after E.V. Pankratiev Stage 5: Eastern Grand Prix

    contest link easy: EI medium-easy: BCDGK medium: L medium-hard: AFH A. Artifacts B. Brackets and Dot ...

  9. 2018-2-13-win10-uwp-让焦点在点击在页面空白处时回到textbox中

    title author date CreateTime categories win10 uwp 让焦点在点击在页面空白处时回到textbox中 lindexi 2018-2-13 17:23:3 ...

  10. tftp 服务器的配置

    如果用下面一条命令能够看到服务已经启动, 则不用安装, 否则需要按 1 或 2 点安装 tftp-server 服务器. [arm@localhost arm]#netstat -a | grep t ...