主页 > 游戏开发  > 

DjangoRESTFramework(DRF)中用于构建API视图类解析

DjangoRESTFramework(DRF)中用于构建API视图类解析

Django REST Framework (DRF) 提供了丰富的视图类,用于构建 API 视图。这些视图类可以分为以下几类:


1. 基础视图类

这些是 DRF 中最基础的视图类,通常用于实现自定义逻辑。

常用类

APIView:

最基本的视图类,所有其他视图类都继承自它。需要手动实现 get、post、put、delete 等方法。适合需要完全自定义逻辑的场景。 from rest_framework.views import APIView from rest_framework.response import Response class MyView(APIView): def get(self, request): return Response({"message": "Hello, World!"})

GenericAPIView:

继承自 APIView,提供了更多的通用功能(如 get_queryset、get_serializer 等)。通常与 Mixin 类一起使用,以实现更高级的功能。 from rest_framework.generics import GenericAPIView from rest_framework.response import Response class MyView(GenericAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer def get(self, request): instances = self.get_queryset() serializer = self.get_serializer(instances, many=True) return Response(serializer.data)
2. 通用视图类(Generic Views)

这些视图类基于 GenericAPIView,并结合了 Mixin 类,提供了更高级的功能。

常用类

ListAPIView:

用于实现列表视图(只读)。默认实现了 get 方法。 from rest_framework.generics import ListAPIView class MyListView(ListAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

RetrieveAPIView:

用于实现详情视图(只读)。默认实现了 get 方法。 from rest_framework.generics import RetrieveAPIView class MyDetailView(RetrieveAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

CreateAPIView:

用于实现创建视图。默认实现了 post 方法。 from rest_framework.generics import CreateAPIView class MyCreateView(CreateAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

UpdateAPIView:

用于实现更新视图。默认实现了 put 和 patch 方法。 from rest_framework.generics import UpdateAPIView class MyUpdateView(UpdateAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

DestroyAPIView:

用于实现删除视图。默认实现了 delete 方法。 from rest_framework.generics import DestroyAPIView class MyDeleteView(DestroyAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

ListCreateAPIView:

结合了 ListAPIView 和 CreateAPIView。默认实现了 get 和 post 方法。 from rest_framework.generics import ListCreateAPIView class MyListCreateView(ListCreateAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

RetrieveUpdateAPIView:

结合了 RetrieveAPIView 和 UpdateAPIView。默认实现了 get、put 和 patch 方法。 from rest_framework.generics import RetrieveUpdateAPIView class MyRetrieveUpdateView(RetrieveUpdateAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

RetrieveDestroyAPIView:

结合了 RetrieveAPIView 和 DestroyAPIView。默认实现了 get 和 delete 方法。 from rest_framework.generics import RetrieveDestroyAPIView class MyRetrieveDestroyView(RetrieveDestroyAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

RetrieveUpdateDestroyAPIView:

结合了 RetrieveAPIView、UpdateAPIView 和 DestroyAPIView。默认实现了 get、put、patch 和 delete 方法。 from rest_framework.generics import RetrieveUpdateDestroyAPIView class MyRetrieveUpdateDestroyView(RetrieveUpdateDestroyAPIView): queryset = MyModel.objects.all() serializer_class = MyModelSerializer
3. 视图集(ViewSets)

视图集将多个视图逻辑组合在一起,通常与路由器(Router)一起使用,自动生成 URL 配置。

常用类

ViewSet:

类似于 APIView,但将多个操作(如 list、create、retrieve 等)组合在一起。需要手动实现各个操作。 from rest_framework import viewsets from rest_framework.response import Response class MyViewSet(viewsets.ViewSet): def list(self, request): return Response({"message": "List view"}) def create(self, request): return Response({"message": "Create view"})

ModelViewSet:

继承自 GenericAPIView 和多个 Mixin 类,默认实现了完整的 CRUD 操作。适合标准的模型操作。 from rest_framework import viewsets class MyModelViewSet(viewsets.ModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

ReadOnlyModelViewSet:

继承自 ModelViewSet,但只提供只读操作(list 和 retrieve)。 from rest_framework import viewsets class MyReadOnlyViewSet(viewsets.ReadOnlyModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer
4. 其他视图类

GenericViewSet:

结合了 GenericAPIView 和 ViewSet 的功能。通常与 @action 装饰器一起使用,定义自定义操作。 from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Response class MyGenericViewSet(viewsets.GenericViewSet): @action(detail=False, methods=['get']) def custom_action(self, request): return Response({"message": "Custom action"})

mixins:

提供了一些通用的功能(如 ListModelMixin、CreateModelMixin 等),通常与 GenericAPIView 或 GenericViewSet 一起使用。
总结 最常用的类: APIView:适合完全自定义逻辑。ModelViewSet:适合标准的模型 CRUD 操作。ListAPIView、RetrieveAPIView 等:适合简单的只读或写操作。GenericAPIView:适合需要结合 Mixin 实现高级功能的场景。
标签:

DjangoRESTFramework(DRF)中用于构建API视图类解析由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“DjangoRESTFramework(DRF)中用于构建API视图类解析