[Django] Django REST Framework(三):APIView、GenericAPIView、Mixins总结

概述

APIView是DRF的视图层中最基本的类,它相当于Django中的View类,其他视图类都是通过继承APIView实现的。

GenericAPIView继承于APIView,在其父类的基础上为列表视图和详情视图添加了常用的行为。

Mixins提供了一些基本视图行为的操作方法,如提供的list()方法将返回查询集,等等。因为Python多继承的特性,因此,在定义视图时可以将GenericAPIViewMixins进行灵活的组合。而DRF中就提供了许多这样的类可以供我们完成所有所需的View。

1.APIView

在DRF中提供了APIView,继承于Django的View,作为最基本的类视图,处理用户的请求并返回响应。和View相比,APIView有如下特点:

  • 1.传递给处理方法的请求是DRF的Request实例,而不是Django的HttpRequest实例;
  • 2.响应并返回的是DRF的Response对象,而不是Django的HttpResponse对象;
  • 3.任何APIException异常都会被捕获并调制到适当的响应中;
  • 4.会对接收的请求进行身份认证和权限的检查。

和使用View类似,使用APIView时,接收的请求会被dispatch到对应的方法中,如get()post()……此外,还可以设置许多属性来控制API各个方面的策略。

使用APIView时需要导入其所在模块:

from rest_framework.views import APIView

基本的使用APIView方式举例如下:

class SnippetList(APIView):

    # 处理GET请求
    def get(self, request, format=None):

        snippet = Snippet.objects.all()
        serializer = SnippetSerializer(snippet, many=True)
        return Response(serializer.data)

    # 处理POST请求
    def post(self, request, format=None):
        serializer = SnippetSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)

1.1.常用属性

.authentication_classes

该属性用于指定当前View endpoint的身份验证类,如:

from rest_framework.authentication import TokenAuthentication


class TestView(APIView):

    authentication_classes = (TokenAuthentication,)
    # ......

使用authentication_classes设置的身份验证类将仅仅对该View验证有效,如果需要对整个项目有效,则需要在settings.py配置文件中进行设置:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        # ......
        'rest_framework.authentication.authentication.TokenAuthentication',
    )
}

DEFAULT_AUTHENTICATION_CLASSES也是身份验证类列表的默认值。

.permission_classes

该属性用于指定当前View endpoint的权限类列表,如:

from rest_framework import permissions
class SnippetList(APIView):
    # ...
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,permissions.IsAuthenticated,permissions.IsAdminUser)
    # ...

如果不指定该属性,则默认使用settings.DEFAULT_PERMISSION_CLASSES中指定的权限列表。

APIView是DRF中所有View的基类,也是DRF中视图层的基础,但APIView并不是重点,重点是下面的GenericAPIViewMixins以及两个混合组成的许

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值