python Django Rest_Framework框架 两个视图基类详解(图文并茂版)
Posted 温柔且上进c
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Django Rest_Framework框架 两个视图基类详解(图文并茂版)相关的知识,希望对你有一定的参考价值。
视图类详解
视图基类
APIView[基本视图类]
- APIView是所有DRF视图类的基类,在前面的文章我们已经简单的介绍过了,python Django Rest_Framework框架 APIView介绍与序列化器详解(图文并茂版)
- 继承APIView实现的视图函数,所有对数据的操作都需要自己完成,使用上是不方便的,下面会介绍几种将数据操作封装起来的视图类,可以根据业务需求来选择最合适的视图类
- 基本所有的视图类都可以实现业务需求,只是方便与不方便的选择!!
GenericAPIView[通用视图类]
- 通用视图类主要作用就是把视图中的特别操作抽取出来,让视图中的方法更加通用,方便对通用操作进行简写
- 特别操作: 指的是不同方法中不能公用的操作,需要抽离出来,单独处理
- 通用操作: 指的是不同方法中可以公用的操作,保留即可
- 继承于APIView基本视图类,主要增加了序列化器操作和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时,可与一个或多个Mixin扩展类一起使用
关于序列化器的属性与方法
get_serializer_class(self)
- get_serializer_class(self): 当出现一个视图类中需要调用多个序列化器时,那么可以通过判断,get_serializer_class方法返回的不同的序列化器类名,使视图方法执行不同的序列化器对象
- 返回值:所有需要调用的序列化器类,默认返回serializer_class,可以重写
get_serializer(self, *args, **kwargs)
- get_serializer(self, *args, **kwargs):主要用来提供给Mixin扩展类使用,如果在视图中想要获取序列化器对象,可以直接调用此方法
- 返回值:序列化器对象
注意
该方法在提供序列化器对象的时候,会向序列化器对象的context属性补充三个参数:request、format、view,这三个数据对象可以在定义序列化器时使用
- request:当前视图的请求对象
- view:当前请求的类视图对象
- format:当前请求期望返回的数据格式
get_queryset(self)
- 主要用来提供给Mixin扩展类使用,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写
- 返回值:对应操作模型的查询集
get_object(self)
- 主要用来提供给Mixin扩展类使用,在视图中可以调用该方法获取详情信息的模型类对象
- 返回值:详情视图所需的模型类数据对象
其它属性
- pagination_class 指明分页控制类
- filter_backends 指明过滤控制类
定义与实现
- 使用GenericAPIView[通用视图类] 作为视图基类,实现对定义的学生模型数据的增删查改操作:
from rest_framework import status
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Students
from .serilizers import StudentsSerializers, StudentModelSerializers
class StudentGenericAPIView(GenericAPIView):
"""通用视图类:多个数据操作"""
# 独特操作
queryset = Students.objects.all()
serializer_class = StudentModelSerializers
def get(self, request):
# 获取查询到的模型数据集
ser = StudentModelSerializers(instance=self.get_queryset(), many=True)
return Response(ser.data, status=status.HTTP_200_OK)
def post(self, request):
ser = self.get_serializer(data=request.data)
# raise_exception:自动将报错信息返回给页面
ser.is_valid(raise_exception=True)
ser.save()
return Response(ser.data, status=status.HTTP_201_CREATED)
class StudentDetailGenericAPIView(GenericAPIView):
"""通用视图类:单个数据操作"""
queryset = Students.objects.all()
serializer_class = StudentModelSerializers
def get(self, request, pk):
# 根据pk值,自动获取对应的模型对象
ser = StudentsSerializers(instance=self.get_object())
return Response(ser.data, status=status.HTTP_200_OK)
def put(self, request, pk):
ser = StudentModelSerializers(instance=self.get_object(), data=request.data)
ser.is_valid(raise_exception=True)
ser.save()
return Response(ser.data, status=status.HTTP_201_CREATED)
def delete(self, request, pk):
self.get_object().delete()
return Response(status=status.HTTP_204_NO_CONTENT)
- 全部数据查询展示:
- 数据全部展示,并且在添加数据时,有不同的方法可供选择(表单、json…)
- 添加数据:
- 返回页面:
- 再次查询所有数据:
- 单个学生信息的查询:
- 单个学生信息的修改:
- 返回页面
- 删除某个学生信息
- 返回页面
- 查询所有数据看是否删除成功:
以上是关于python Django Rest_Framework框架 两个视图基类详解(图文并茂版)的主要内容,如果未能解决你的问题,请参考以下文章
python 中 django 的问题-------- 请高人指点 尽量详细点哦 初学django