Skip to content

基于类的视图

前置基础:了解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()