一、功能
实现后台功能的核心
DRF:视图基于类------CBV
二、方法
- 一般用法
#在views.py中
from rest_framework.viewsets import ModelViewSet
from .models import 库名
from .serializs import 库名Serializer
class StudentViewset(ModelViewSet):
queryset = 库名.objects.all()
serializer_class = 库名Serializer
- 有外键时的用法
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from rest_framework import status
from .models import 数据库名
from .serializer import 库名Serializer
class 库名ViewSet(ModelViewSet):
queryset = 库名.objects.all()
serializer_class = 库名Serializer
#添加方法(执行post请求)
def create(self,request,*args,**kwargs):
#接收前端数据
rec = request.data
#用rec.get('传过来json数据的key')
try:
数据库名.objects.create(field=rec.get('key')....)
return Response({'msg':'添加成功'},status= status.HTTP_201_CREATED)
except Exception as e:
return Response({'error':'添加失败%s'%e},status=status.HTTP_400_BAD_REQUEST)
#修改方法(包含有put、patch两种请求)
def update(self,request,*args,**kwargs):
#接收前端数据
rec = request.data
#用rec.get('传过来json数据的key')
try:
数据库名.objects.filter(id=kwargs.get('id')).update(field=rec.get('key')....)
#update可以是多个傎,也可以是部分值。
#可以是1.field=value...
#2. **rec(对字典解析)
return Response({'msg':'修改成功'},status= status.HTTP_201_CREATED)
except Exception as e:
return Response({'error':'修改败%s'%e},status=status.HTTP_400_BAD_REQUEST)
以下代码是有对python类继承,继承关系有深入理解。如果你不了解,上面的代码已经够用了
三、源码解析
-
基础类是APIView解决请求分的问题。
其中dispatch函数是分配请求方式。有
get
post
put
patch
delete
-
GenericAPIView是解决数据库与序列化简化代码
queryset = 库名.objects.all()
serializer_class = 库名Serializer -
Mixin是解决序列化与反序列化简化代码
list查所有数据
create添加数据
retieve查看单个数据
update更新单个数据(put、patch请求)
destory删除单个数据
ListModelMixin–self.list()
CreateModelMixin–self.create()
RetieveModelMixin–self.retieve(request,pk)
DestroyModelMixin–self.destory(request,pk)
UpdateModelMixin–self.update(request,pk)
list、create自由组合
retrieve、update、destroy自由组合
4. ModelViewSet解决序列化与反序列化高度集合