两个视图基类
APIView
- APIView是REST framework提供的所有视图的基类,继承自Django的View父类
- APIView与View的不同之处在于:
- 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;
- 视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;
- 任何APIException异常都会被捕获到,并且处理成合适的响应信息;
- 在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
- 基于APIView写五个接口
class UserView(APIView):
def get(self, request):
res_list = User.objects.all()
ser = UserSerializer(instance=res_list, many=True)
return Response(ser.data)
def post(self, request):
ser = UserSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response({
'code': 100, 'msg': "新增成功"}, status=201)
else:
return Response({
'code': 101, 'msg': ser.errors})
class UserDetailView(APIView):
def get(self, request, pk):
obj = User.objects.filter(pk=pk).first()
ser = UserSerializer(instance=obj)
return Response(ser.data)
def put(self, request, pk):
obj = User.objects.filter(pk=pk).first()
ser = UserSerializer(instance=obj, data=request.data)
if ser.is_valid():
ser.save()
return Response