RESTframework의 뷰 설명
5161 단어 To_Study
-From rest_framework.views import APIView
rest_framework.generics.GenericAPIView는 APIView에서 상속되며, 목록 뷰 및 세부 정보 뷰에 사용할 수 있는 일반적인 지원 방법이 추가되었습니다.사용할 때, 보통 하나 이상의 Mixin 확장 클래스queryset = 조회 집합serializerclass=서열화기의 유형 getqueryset은queryset과 같습니다.GenericAPIView에서 제공하는 방법getobject는 점차적으로 대상을 조회할 수 있습니다 getSerializer와 Serializerclass, GenericAPIView에서 사용할 수 있는 방법
3. Generic APIView와 함께 사용되는 다섯 가지 확장 클래스는 List Model Mixin,Create Model Mixin,Updata Model Mixin,Retrieve Model Mixin,Destroy Model Mixin이다.
① ListModelMixin: (즉, 모든 조회)
list(request, *args, **kwargs) 방법을 제공하여 목록 보기를 신속하게 실현했습니다. 상태 코드는 기본 200입니다.
class ListModelMixin(object):
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
#
queryset = self.filter_queryset(self.get_queryset())
#
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
#
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
from rest_framework.mixins import ListModelMixin
class GunsListView(ListModelMixin,GenericAPIView):
# GunInfo.object.all()
queryset = GunInfo.object.all()
# GunInfoSerializer
serializer_class = GunInfoSerializer
② CreateModelMixin(객체 만들기)
class CreateModelMixin(object):
"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
#
serializer = self.get_serializer(data=request.data)
#
serializer.is_valid(raise_exception=True)
#
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
def get_success_headers(self, data):
try:
return {'Location': str(data[api_settings.URL_FIELD_NAME])}
except (TypeError, KeyError):
return {}
③ RetrieveModelMixin
retrieve(request,*args,**kwargs)
존재하는 데이터 대상이 존재하면 200을 되돌려주고 그렇지 않으면 404 Rertieve Model Mixin 원본 디스플레이를 되돌려줍니다.
class RetrieveModelMixin(object):
"""
Retrieve a model instance.
"""
def retrieve(self, request, *args, **kwargs):
# ,
instance = self.get_object()
#
serializer = self.get_serializer(instance)
return Response(serializer.data)
④UpdateModelMixin
소스 코드 표시:
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
# If 'prefetch_related' has been applied to a queryset, we need to
# forcibly invalidate the prefetch cache on the instance.
instance._prefetched_objects_cache = {}
return Response(serializer.data)
def perform_update(self, serializer):
serializer.save()
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
⑤ DestoryModelMixin(삭제)
class DestroyModelMixin(object):
"""
Destroy a model instance.
"""
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
self.perform_destroy(instance)
return Response(status=status.HTTP_204_NO_CONTENT)
def perform_destroy(self, instance):
instance.delete()