Django REST framework中的APIView
rest_framework.views.APIView
APIView是REST framework提供的所有视图的基类,继承自Django的View父类。
APIView与View的不同之处在于:
- 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;
- 视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;
- 任何APIException异常都会被捕获到,并且处理成合适的响应信息;
- 在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
支持定义的属性:
- authentication_classes列表或元祖,身份认证类
- permissoin_classes列表或元祖,权限检查类
- throttle_classes列表或元祖,流量控制类
在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。
class BookListAPIView(APIView):
def get(self,request):
# request.GET
# request.query_params
#params = request.query_params
# 1.查询数据
books = BookInfo.objects.all()
# 2.创建序列化器,并传递查询结果集(设置many=True)
serializer = BookInfoModelSerializer(books, many=True)
# 3.返回响应 serializer.data 就是字典列表
return Response(serializer.data)
def post(self,request):
# request.POST, request.body
#data = request.data
# 1.接收参数
book_dict = request.data
# 2.创建序列化器,并传递参数
serializer = BookInfoModelSerializer(data=book_dict)
# 3.验证数据,并根据验证结果进行判断
if serializer.is_valid():
# 4.数据验证没有问题,调用序列化器的save方法。来触发序列化器的create方法
# create方法会调用模型来保存到数据库中
serializer.save()
# 5. 返回响应 serializer.data 就是字典数据
return Response(serializer.data)
else:
# 返回错误信息
return Response({'msg':'保存失败'})
DRF中的APIView和Django中的View对比
可以看出DRF中封装好的APIView功能还是十分强大的!