栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

DRF各类View视图区别详解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DRF各类View视图区别详解

DRF的View视图,继承自Django的 View,内部实现了 APIView 和 ViewSetMixin两大类。同时在此基础上进行了扩展,实现了一些通用(Generic)类,混入(Mixin)类等额外功能类,帮助我们用更少的代码实现restful风格的API接口。

下面对我们各类视图做一些说明。

View:

  • 目录:django/views/generic/base.py

  • Django原生,请求通过路由之后进入的地方

  • 实现了as_view()方法,内部调用dispatch方法转发请求到视图内部的方法。例如默认的 GET请求转发到get方法
  • 限定允许的请求方式
  • 响应options类型请求的方法

APIView:

  • 目录:rest_framework/views.py
  • DRF 继承自 Django的 View
  • 重写了as_view方法,内部调用自己实现的dispatch initial_request等
    • initialize_request内使用Request类,实现了对request的封装,例如我们用到的request.query_params request.data等
  • 定义了render_classes、permission_classes、authentication_classes、pagination_classes等
  • 实现了权限校验、身份认证、频率控制、返回数据渲染;
  • 视图继承自此时,路由使用url("test/", MyView.as_view())。GET类型请求转发到get方法上,不支持自定义请求方式和视图函数的映射

GenericAPIView:

  • 目录:rest_framework/generics.py
  • 继承自APIView。

  • 实现了工具属性和方法

    # queryset: 属性,视图内的数据集合
    # serializer_class: 属性,序列化器
    # lookup_field: 属性,指定字段为pk,也就是常用的如 retrieve 等方法用到的主键值参数
    # filter_backends: 属性,搜索配置
    # pagination_class: 属性,分页配置
    # get_queryset(): 数据集合方法。更推荐使用,比直接使用self.queryset属性,性能更佳
    # get_object(): 有lookup_field参数或者lookup_url_kwarg参数,需要获取指定数据对象时,会自动校验权限
    # get_serializer(): 获取序列化器的实例
    # get_serializer_class(): 获取序列化器类
    # get_serializer_context(): 返回序列器上下文。默认有request
    # filter_queryset(): 方法,查询
    # paginator: 属性,分页器实例
    # paginate_queryset: 分页之后的queryset
    # get_paginated_response: 分页后的response
    

ViewSetMixin:

  • 目录:rest_framework/viewsets.py
  • 重写了as_view方法,可以在方法内使用actions参数把请求方式和方法名绑定在一起.

    # 路由形式1:
    url("test/", MyViewSet.as_view({"get": "get_my_data"}))
    # 路由形式2:
    router = DefaultRouter()
    router.register("test/", MyViewSet, basename="my_view")
    
  • 可以使用router.register()来设置路由

扩展:

  • 各种Mixin:混入类,提供额外的创建/删除等功能。需要配合APIView 和 ViewSet。
  • 各种 APIView :Mixin配合APIView
  • 各种 ViewSet:Mixin配合ViewSet
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号