基于类的视图
前置基础:了解django框架的基本流程,能编写简单的视图。
了解DRF框架的基本原理,能编写简单的序列化器。
Django基于类的视图
视图的功能是接收url请求,并返回响应。这就给人一种模板的感觉:可以把视图做成一个类,这个类实现了一些基本的功能,即自动的处理url请求、渲染给定的template、甚至自动处理给定数据、并自动返回response。
相比于函数,把这种高复用的代码设计成类更加合理。
为了配合类视图的使用,Django还用mixin
后缀命名(直译为“混合”)实现了各种各样的类,他们是可选的,作用于视图类(通过继承的方式。而且可以多继承),实现各种各样的功能,即插即用,这提供了最大的灵活性。最后,Django提供了可选的装饰器,它不是语言原生的函数装饰器,而是作用于类中的某一个方法的装饰器,进一步增强某一个方法的功能,再次减少了工作量。
Django 提供了适用于很多应用的基本视图类。所有视图继承自 View
类,它处理视图链接到 URLs,HTTP 方法调度和其他简单功能。他们很繁杂,不必死记硬背,知道常用的几个就可以了。
django文档详细介绍了一些常用的视图类。
使用类视图时需要注意:
- 只能从一个通用视图继承,多个视图继承往往无法按照与其工作。
- Mixin插件固然好用,但一旦多了之后就容易造成混乱。这是多继承都无法避免的。
DRF基于类的视图
作为Django的衍生框架,REST framework 提供了一个 APIView
类,它是 Django 的 View
类的子类。
APIView
类与常规 View
类不同,有以下几种方法:
- 传递给处理程序方法的请求将是 REST framework 的
Request
实例,而不是 Django 的HttpRequest
实例。 - 处理程序方法可能会返回 REST framework 的
Response
,而不是 Django 的HttpResponse
。该视图将管理内容协商并在响应中设置正确的渲染器。 - 任何
APIException
异常都会被捕获并调解为适当的响应。 - 传入的请求将被认证,并且在将请求分派给处理程序方法之前将运行适当的的权限和/或限流检查。
使用 APIView
类与使用常规 View
类几乎是一样的,像往常一样,传入的请求被分派到适当的处理程序方法,如 .get()
或 .post()
。