视图简介
APIView —> GenericAPIView —> 视图扩展类 —> 子类视图
1.APIView
使用前需导入
from rest_framework.views import APIView
class StaffDetaView(APIView):
def get(self,request,pk):
return Response({"code":200,"msg":'获取成功'})
def put(self,request,pk,**kwargs):
# 根据id查找相应信息,返回对象
staff = Staff.objects.filter(id=pk).first()
if not staff:
return Response({
"code":400,
"msg":'修改数据不存在'
})
# 反序列化 更新
# partial 实现局部更新
ser = StaffSerializer(instance=staff, data=request.data, partial=True)
# 校验数据
if ser.is_valid():
ser.save() # 调用update
return Response({
"code": 200,
"msg": '修改成功'
})
else:
return Response({"code":400,"msg":ser.errors})
return self.update(request,pk,**kwargs)
def delete(self,request,pk):
return Response({"code":200,"msg":'删除员工成功'})
2.GenericAPIView
继承自APIView
from rest_framework.generics import GenericAPIView
通用属性
- queryset 视图查询集
- serializer_class 视图使用的序列化器
列表视图使用:
- pagination_class分页控制类
- filter_backends过滤控制后端,对字段过滤
详情页视图使用
- lookup_field 查询单一数据对象时使用的条件字段,默认为’pk’
- lookup_url_kwarg 查询单一数据时URL中的关键字参数,默认与look_field相同
通用方法:
- get_queryset()
- 返回视图使用的查询集
- 默认返回queryset属性,支持重写 - get_serializer_class()
- 返回序列化器类,默认返回serializer_class,可以重写 - get_serializer(self, *args, **kwargs)
-返回序列化器对象
详情页独有方法
- get_object()
-默认参数来过滤
class StaffView(GenericAPIView):
queryset = Staff.objects.all()
serializer_class = StaffSerializer
def get(self,request,*args,**kwargs):
staff_info = self.get_queryset()
# 序列化,返回一个序列化对象
staff_all = self.get_seializer(staff_info,many=True)
return Response({
"staff":staff_all.data
})
3.扩展类
扩展类 | 封装方法 | 说明 |
---|---|---|
ListModelMixin | List | 获取一组数据 |
CreateModelMixin | create | 新增一条数据 |
RetrieveModelMixin | retrieve | 获取指定数据 |
UpdateModelMixin | update | 更新指定数据 |
DestroyModelMixin | destroy | 删除指定数据 |
class StaffView(GenericAPIView,ListModelMixin):
queryset = Staff.objects.all()
serializer_class = StaffSerializer
def get(self,request,*args,**kwargs):
return self.list(request,*args,**kwargs)
4.视图子类
子类视图类 | 继承 | 请求处理方法 |
---|---|---|
ListAPIView | GenericAPIView、ListModelMixin | get |
CreateAPIView | GenericAPIView、CreateModelMixin | post |
RetrieveAPIView | GenericAPIView、RetrieveModelMixin | get |
UpdateAPIView | GenericAPIView、UpdateModelMixin | put |
DestroyAPIView | GenericAPIView、DestroyModelMixin | delete |
ListCreateAPIView | GenericAPIView、ListModelMixin、CreateModelMixin | get 和 post |
RetrieveUpdateAPIView | GenericAPIView、RetrieveModelMixin、UpdateModelMixin | get、put |
RetrieveDestroyAPIView | GenericAPIView、RetrieveModelMixin、DestroyModelMixin | get 和 delete |
RetrieveUpdateDestroyAPIView | GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin | get、put、delete |
导入
from rest_framework.generics import *
class StaffView(ListCreateAPIView):
queryset = Staff.objects.all()
serializer_class = StaffSerializer
注:这是示例,其他视图方法一样