Django REST Framework 视图

DRF 中的Request和Response

Request
  • Request对象
    • from django.http import HttpRequest 传入视图的request对象时django默认的HttpRequest对象
    • from rest_framework.request import Request传入视图(继承自DRF的APIView)的request对象为扩展了HttpRequest类的Request类的对象
    • rest_framework提供了Parser解析器,在接收到请求后根据Content-Type指明的数据类型进行parse解析,将解析后的类字典对象保存到Request对象
  • Request对象常用属性
    • request.data:类似于django中的POST,PUT等,返回解析后的请求体数据,能够解析表单类型,Json,XML等
    • request.query_params:类似于django中的GET,解析url中?后面的查询字符串参数,返回数据为QueryDict
Response
  • Response对象
    • from django.http import HttpResponse进行序列化时,要将返回给前端的数据进行Json格式的转换或render渲染
    • from rest_framework.response import Response,使用response构造响应对象时,返回的数据会被转换正符合前端要求的类型
      Response(data, status=None, template_name=None, headers=None, content_type=None)

DRF 视图

  • 视图概览


    通用视图的继承关系.png
  • 视图说明

    • 两个基类
      • APIView(rest_framework.views.APIView, 继承自django的View)
      1. 限流属性(throttle_classes )
      2. 权限属性(permissoin_classes)
      3. 认证属性(authentication_classes)
      4. 在APIView的类视图中还是实现get(),post()等请求
      APIView与View的区别
      传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;
      视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;
      任何APIException异常都会被捕获到,并且处理成合适的响应信息;
      在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
      
      • GenericAPIView(rest_framework.generics.GenericAPIView, 继承自APIView)
      1. 序列化器指定属性(serializer_class)
        • get_serializer() 获取序列化器类
        • get_serializer_class() 获取多个序列化器类
      2. 查询集属性(queryset )
        • get_queryset() 获取视图的查询集中所有数据
        • get_object() 获取查询集中的单一数据(使用lookup_field参数过滤queryset)
      3. 分页属性(pagination_class)
      4. 过滤属性(filter_backends )
      5. 搭配一个或多个Mixin扩展类使用
    • 五个扩展类
五个扩展类 扩展类说明 方法 方法说明
CreateModelMixin 保存数据 create(request, *args, **kwargs) 创建资源的视图
UpdateModelMixin 更新数据 update(request, *args, **kwargs) 更新一个数据对象
DestroyModelMixin 删除数据 destroy(request, *args, **kwargs) 删除一个数据对象
RetrieveModelMixin 获取单一数据 retrieve(request, *args, **kwargs) 返回一个数据对象
ListModelMixin 获取多个数据 list(request, *args, **kwargs) 返回多个数据对象
  • 其他扩展子类
扩展子类 提供的方法 继承自
CreateAPIView 提供 post 方法 GenericAPIView、CreateModelMixin
ListAPIView 提供 get 方法 GenericAPIView、ListModelMixin
RetireveAPIView 提供 get 方法 GenericAPIView、RetrieveModelMixin
DestoryAPIView 提供 delete 方法 GenericAPIView、DestoryModelMixin
UpdateAPIView 提供 put 方法 GenericAPIView、UpdateModelMixin
ListCreateAPIView 提供 get, post方法 GenericAPIView、ListModelMixin、CreateModelMixin
RetrieveUpdateAPIView get、put 方法 GenericAPIView、RetrieveModelMixin、UpdateModelMixin
RetrieveDestoryAPIView get、delete方法 GenericAPIView、RetrieveModelMixin、DestoryModelMixin
RetrieveUpdateDestoryAPIView get、put、delete方法 GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

你可能感兴趣的:(Django REST Framework 视图)