文章目录
前言
- 这里只是简单的介绍了一下django下rest framework,具体的一些使用内部实现等还需要自己探究
FBV & CBV
- FBV
- 基于函数的视图
- CBV
- 基于类的视图
- python 中 通过反射执行: 基于反射实现根据请求方式不同,执行不同的方法-(getattr)
restful 规范
django rest framework
- 首先默认已经知道restful的一些规范
drf view 的继承关系
- 这里盗用一下他人的图片,图里边还有一小部分没有画,也不太影响阅读,第一张图大概介绍了类的继承关系
- 这里表示了几乎所有的视图的继承关系,也就表明每种视图继承前者的功能的同时,并在此基础上加以变化,大家应该很清楚基于类特别是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。