概述
APIView是DRF的视图层中最基本的类,它相当于Django中的View类,其他视图类都是通过继承APIView实现的。
GenericAPIView继承于APIView,在其父类的基础上为列表视图和详情视图添加了常用的行为。
Mixins提供了一些基本视图行为的操作方法,如提供的list()方法将返回查询集,等等。因为Python多继承的特性,因此,在定义视图时可以将GenericAPIView和Mixins进行灵活的组合。而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并不是重点,重点是下面的GenericAPIView和Mixins以及两个混合组成的许多类。

本文详细介绍了Django REST Framework(DRF)中的APIView、GenericAPIView和Mixins,包括它们的特点、常用属性和方法。APIView作为基础视图类,处理请求并返回响应。GenericAPIView提供了列表视图和详情视图的基本操作,如queryset、serializer_class等。Mixins则提供了如ListModelMixin、CreateModelMixin等便捷操作,简化视图的实现。通过具体的通用视图如ListCreateAPIView和RetrieveUpdateDestroyAPIView,可以快速构建RESTful API。最后,通过示例展示了如何逐步重构视图,以理解DRF视图的工作原理。
最低0.47元/天 解锁文章
885

被折叠的 条评论
为什么被折叠?



