怎么自己建一個(gè)網(wǎng)站嗎今日熱榜
Django REST Framework (DRF) 提供了豐富的視圖類,用于構(gòu)建 API 視圖。這些視圖類可以分為以下幾類:
1. 基礎(chǔ)視圖類
這些是 DRF 中最基礎(chǔ)的視圖類,通常用于實(shí)現(xiàn)自定義邏輯。
常用類
-
APIView
:- 最基本的視圖類,所有其他視圖類都繼承自它。
- 需要手動(dòng)實(shí)現(xiàn)
get
、post
、put
、delete
等方法。 - 適合需要完全自定義邏輯的場(chǎng)景。
from rest_framework.views import APIView from rest_framework.response import Responseclass MyView(APIView):def get(self, request):return Response({"message": "Hello, World!"})
-
GenericAPIView
:- 繼承自
APIView
,提供了更多的通用功能(如get_queryset
、get_serializer
等)。 - 通常與
Mixin
類一起使用,以實(shí)現(xiàn)更高級(jí)的功能。
from rest_framework.generics import GenericAPIView from rest_framework.response import Responseclass MyView(GenericAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializerdef get(self, request):instances = self.get_queryset()serializer = self.get_serializer(instances, many=True)return Response(serializer.data)
- 繼承自
2. 通用視圖類(Generic Views)
這些視圖類基于 GenericAPIView
,并結(jié)合了 Mixin
類,提供了更高級(jí)的功能。
常用類
-
ListAPIView
:- 用于實(shí)現(xiàn)列表視圖(只讀)。
- 默認(rèn)實(shí)現(xiàn)了
get
方法。
from rest_framework.generics import ListAPIViewclass MyListView(ListAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
-
RetrieveAPIView
:- 用于實(shí)現(xiàn)詳情視圖(只讀)。
- 默認(rèn)實(shí)現(xiàn)了
get
方法。
from rest_framework.generics import RetrieveAPIViewclass MyDetailView(RetrieveAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
-
CreateAPIView
:- 用于實(shí)現(xiàn)創(chuàng)建視圖。
- 默認(rèn)實(shí)現(xiàn)了
post
方法。
from rest_framework.generics import CreateAPIViewclass MyCreateView(CreateAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
-
UpdateAPIView
:- 用于實(shí)現(xiàn)更新視圖。
- 默認(rèn)實(shí)現(xiàn)了
put
和patch
方法。
from rest_framework.generics import UpdateAPIViewclass MyUpdateView(UpdateAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
-
DestroyAPIView
:- 用于實(shí)現(xiàn)刪除視圖。
- 默認(rèn)實(shí)現(xiàn)了
delete
方法。
from rest_framework.generics import DestroyAPIViewclass MyDeleteView(DestroyAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
-
ListCreateAPIView
:- 結(jié)合了
ListAPIView
和CreateAPIView
。 - 默認(rèn)實(shí)現(xiàn)了
get
和post
方法。
from rest_framework.generics import ListCreateAPIViewclass MyListCreateView(ListCreateAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
- 結(jié)合了
-
RetrieveUpdateAPIView
:- 結(jié)合了
RetrieveAPIView
和UpdateAPIView
。 - 默認(rèn)實(shí)現(xiàn)了
get
、put
和patch
方法。
from rest_framework.generics import RetrieveUpdateAPIViewclass MyRetrieveUpdateView(RetrieveUpdateAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
- 結(jié)合了
-
RetrieveDestroyAPIView
:- 結(jié)合了
RetrieveAPIView
和DestroyAPIView
。 - 默認(rèn)實(shí)現(xiàn)了
get
和delete
方法。
from rest_framework.generics import RetrieveDestroyAPIViewclass MyRetrieveDestroyView(RetrieveDestroyAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
- 結(jié)合了
-
RetrieveUpdateDestroyAPIView
:- 結(jié)合了
RetrieveAPIView
、UpdateAPIView
和DestroyAPIView
。 - 默認(rèn)實(shí)現(xiàn)了
get
、put
、patch
和delete
方法。
from rest_framework.generics import RetrieveUpdateDestroyAPIViewclass MyRetrieveUpdateDestroyView(RetrieveUpdateDestroyAPIView):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
- 結(jié)合了
3. 視圖集(ViewSets)
視圖集將多個(gè)視圖邏輯組合在一起,通常與路由器(Router)一起使用,自動(dòng)生成 URL 配置。
常用類
-
ViewSet
:- 類似于
APIView
,但將多個(gè)操作(如list
、create
、retrieve
等)組合在一起。 - 需要手動(dòng)實(shí)現(xiàn)各個(gè)操作。
from rest_framework import viewsets from rest_framework.response import Responseclass MyViewSet(viewsets.ViewSet):def list(self, request):return Response({"message": "List view"})def create(self, request):return Response({"message": "Create view"})
- 類似于
-
ModelViewSet
:- 繼承自
GenericAPIView
和多個(gè)Mixin
類,默認(rèn)實(shí)現(xiàn)了完整的 CRUD 操作。 - 適合標(biāo)準(zhǔn)的模型操作。
from rest_framework import viewsetsclass MyModelViewSet(viewsets.ModelViewSet):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
- 繼承自
-
ReadOnlyModelViewSet
:- 繼承自
ModelViewSet
,但只提供只讀操作(list
和retrieve
)。
from rest_framework import viewsetsclass MyReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):queryset = MyModel.objects.all()serializer_class = MyModelSerializer
- 繼承自
4. 其他視圖類
-
GenericViewSet
:- 結(jié)合了
GenericAPIView
和ViewSet
的功能。 - 通常與
@action
裝飾器一起使用,定義自定義操作。
from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Responseclass MyGenericViewSet(viewsets.GenericViewSet):@action(detail=False, methods=['get'])def custom_action(self, request):return Response({"message": "Custom action"})
- 結(jié)合了
-
mixins
:- 提供了一些通用的功能(如
ListModelMixin
、CreateModelMixin
等),通常與GenericAPIView
或GenericViewSet
一起使用。
- 提供了一些通用的功能(如
總結(jié)
- 最常用的類:
APIView
:適合完全自定義邏輯。ModelViewSet
:適合標(biāo)準(zhǔn)的模型 CRUD 操作。ListAPIView
、RetrieveAPIView
等:適合簡(jiǎn)單的只讀或?qū)懖僮鳌?/li>GenericAPIView
:適合需要結(jié)合Mixin
實(shí)現(xiàn)高級(jí)功能的場(chǎng)景。