rest_framework学习之view、APIView、GenericAPIView理解

在django和rest_framework项目中我们经常可以看到view、APIView、GenericAPIView,在此记录下三者关系

在说之前,先介绍下FBV和CBV

FBV(function base view)

我们经常写的视图函数都是FBV,如:

def index(request):

     return HttpResponse()

CBV(class base view)

定义视图类来处理逻辑,如:

from django.views import View

class Index(View):

    def get(self, request):

       return HttpResponse()

    def post(self, request):

        return HttpResponse()

 

CBV相比较FBV有什么好处呢?

1、可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性;

2、python多继承特性,可以使用面向对象的技术,比如Mixin(多继承),提高了代码的复用性。

View

上述例子中可以看到视图类继承了django的View,这就是我们介绍的View,可以看到,View是django自带的模块,View内部的as_view方法和dispatch方法,实现了http请求可通过不同的http请求方法走到不同的函数中。

APIView

APIView是django rest framework框架中的基类,使用前需要安装dj_rest_framework。APIView继承了django中的View,所以也具有View的特性,相比较View进行了封装,主要内容有:

1、传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;

2、视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;

3、任何APIException异常都会被捕获到,并且处理成合适的响应信息;

4、在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
支持定义的属性:

  • authentication_classes 列表或元祖,身份认证类
  • permissoin_classes 列表或元祖,权限检查类
  • throttle_classes 列表或元祖,流量控制类

GenericAPIView

继承自APIVIew,增加了对于列表视图和详情视图可能用到的通用支持方法。通常使用时,可搭配一个或多个Mixin扩展类。

支持定义的属性:

  • queryset 列表视图的查询集
  • serializer_class 视图使用的序列化器

GenericAPIView更多的是搭配Mixin扩展类来实现部分功能,我们本章不过多介绍Mixin扩展类。queyset和serializer_class 是后续ViewSet视图集中重要的属性,也需要了解详细。

后面会介绍ViewSet和Mixin扩展类,今天先这样吧。总之不管是APIView还是GenericAPIView,都是为了能让开发者更有效、更方便地开发符合REST规范接口。

 

 

 

你可能感兴趣的:(django)