1. 主页
  2. DRF实战教程
  3. DRF实战之类视图

DRF实战之类视图

类视图

使用类视图最大的好处就是可以创建复用的行为。我们在上一节,已经用了简单的类视图。

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把我们常见的操作继续封装了起来,封装 起来的代码就在ListCreateAPIViewRetrieveUpdateDestroyAPIView

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

我们要如何帮助您?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注