类视图
使用类视图最大的好处就是可以创建复用的行为。我们在上一节,已经用了简单的类视图。
mixins
我们常用的操作比如创建、更新、删除、查找。REST框架已经帮我们写好了,写的代码就在mixins这个类里面。
所以只有我们自己的视图直接继承这个类,就完全可以拥有上面的所有功能。
from rest_framework import mixins
from rest_framework import generics
class UserList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class UserDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
注意:路由关键字的参数要是pk
使用通用的基于类的视图
我们可以可以看到我的代码量已经减少了很多,但是我们还可以继续优化。REST把我们常见的操作继续封装了起来,封装 起来的代码就在ListCreateAPIView
和RetrieveUpdateDestroyAPIView
from rest_framework import generics
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer