RESTframework의 뷰 설명

5161 단어 To_Study
1. APIView
-From rest_framework.views import APIView
  • APIView는 REST 프레임워크에서 제공하는 모든 시도의 기본 클래스로, Django의 View 상위 클래스
  • 를 상속합니다.
  • APIView와 View의 차이점:
  • 보기 방법에 전송된 REST 프레임워크의 Request 대상은 Django의 Http Request 대상이 아니라 모든 APIException 이상이 포착되고 적절한 정보(Json 형식)로 처리되어 스케줄링()을 나누기 전에 요청한 인증, 권한 검사, 데이터 제어
  • 공통점: APIView에서 일반적인 클래스 보기 정의 방법으로 get(),post() 또는 다른 요청 방식을 실현하는 방법
  • 2. GenericAPIView
    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(객체 만들기)
  • 보기의 확장 클래스를 만들고 클래스create(request, *args, **kwargs) 방법을 제공하여 자원을 만드는 보기를 신속하게 실현하고 성공한 후 201 상태 코드
  • 로 돌아갑니다.
  • 만약에 서열화기가 전방에서 보낸 데이터 검증에 실패하면 400의 오류인 CreatModel Mixin의 원본 코드를 되돌려줍니다:
  • 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 방법 제공
  • 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
  • 보기 확장 클래스를 업데이트하고 업데이트(request, *args, **kwargs) 방법을 제공하여 존재하는 데이터 대상을 신속하게 업데이트할 수 있습니다.
  • partial업데이트 (request, *args, **kwargs) 방법으로 국부 업데이트를 실현할 수 있습니다.200 을 성공적으로 되돌렸고, 서열화기 검사 데이터가 실패했을 때 400 오류를 되돌려줍니다.

  • 소스 코드 표시:
    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(삭제)
  • 보기 확장 클래스를 삭제하고destroy(request,*args,**kwargs) 방법을 제공하여 존재하는 데이터 대상을 신속하게 삭제할 수 있음
  • 소스 코드 표시:
    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()
    

    좋은 웹페이지 즐겨찾기