django(基础篇) rest_framework

前言

  • 这里只是简单的介绍了一下django下rest framework,具体的一些使用内部实现等还需要自己探究

FBV & CBV

  • FBV
    • 基于函数的视图
  • CBV
    • 基于类的视图
    • python 中 通过反射执行: 基于反射实现根据请求方式不同,执行不同的方法-(getattr)

restful 规范

django rest framework

  • 首先默认已经知道restful的一些规范

drf view 的继承关系

Object View +as_view(cls) APIView GenericAPIView ListModelMixin CreateModelMixin RetrieveModelMixin UpdateModelMixin DestroyModelMixin CreateAPIView ListAPIView RetrieveAPIView DestroyAPIView UpdateAPIView ListCreateAPIView RetrieveUpdateAPIView RetrieveDestroyAPIView RetrieveUpdateDestroyAPIView ViewSet ViewSetMixin GenericViewSet ModelViewSet ReadOnlyModelViewSet

在这里插入图片描述

  • 这里盗用一下他人的图片,图里边还有一小部分没有画,也不太影响阅读,第一张图大概介绍了类的继承关系
  • 这里表示了几乎所有的视图的继承关系,也就表明每种视图继承前者的功能的同时,并在此基础上加以变化,大家应该很清楚基于类特别是django下cbv的请求过程
  • 在drf下我们需要清楚 APIView,Genericviews,Mixins, ViewSets关系与区别

APIView

  • 继承自django view, 主要提供了与view相同的请求分发与请求包装,回复包装,异常处理,权限认证
  • APIView与dview的区别
    • request 不同: 被传入到处理方法的请求不会是Django的HttpRequest类的实例,而是REST framework的Request类的实例
    • Response: 处理方法可以返回REST framework的Response,而不是Django的HttpRequest。视图会管理内容协议,给响应设置正确的渲染器。
    • 异常触发: 任何APIException异常都会被捕获,并且传递给合适的响应。
    • 认证与权限: 进入的请求将会经过认证,合适的权限和(或)节流检查会在请求被派发到处理方法之前运行
  • 相同点
    • 进入的请求会被分发到合适处理方法比如.get(),或者.post()。另外,很多属性会被设定在控制API策略的各种切面的类上。

GenericViews

  • GenericViews继承自APIView, 作为通用的View
  • 扩展了APIView,为标准list和detail view 添加了通常需要的行为。
  • 还提供了控制视图行为的属性如queryset, serializer_class …以及一些控制方法get_queryset(self),get_object(self)…

Mixins

  • Mixin 类提供用于提供基本视图行为的操作。注意mixin类提供动作方法,如list,create等, 而不是直接定义处理程序方法,例如 .get() 和 .post(), 这允许更灵活的行为组成。
  • 定义的mixins
    • ListModelMixin
    • CreateModelMixin
    • UpdateModelMixin
    • DestroyModelMixin

GenericViews 与 Mixins

  • 通过GenericViews与具体Mixins类的组合创建最基本的通用视图
  • 通用视图
    • CreateAPIView
    • ListAPIView
    • RetrieveAPIView
    • DestroyAPIView
    • UpdateAPIView
    • ListCreateAPIView
    • RetrieveUpdateAPIView
    • RetrieveDestroyAPIView
    • RetrieveUpdateDestroyAPIView

ViewSets

  • 特点
    • ViewSet 只是一种基于类的视图,它不提供任何方法处理程序(如 .get()或.post()),而是提供诸如 .list() 和 .create() 之类的操作。
    • ViewSet 的方法处理程序仅使用 .as_view() 方法绑定到完成视图的相应操作。
    • 通常不是在 urlconf 中的视图集中显示注册视图,而是要使用路由类注册视图集,该类会自动为你确定 urlconf。
    • 与View相比有两个特点
      • 重复的逻辑可以组合成一个类。在上面的例子中,我们只需要指定一次 queryset,它将在多个视图中使用。
      • 通过使用 routers, 不再需要自己处理URLconf。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值