REST 프레임워크 보기 클래스의 APIView 및 GenericAPIView

3116 단어 RESTframework
APIView 베이스 뷰 클래스
rest_framework.views.APIView
APIView는 REST 프레임워크가 제공하는 모든 보기의 기본 클래스로 Django의 View 부류를 계승한다.
  • 보기 방법에 전송된 것은 REST 프레임워크의 Request 대상이지 Django의 HttpRequeset 대상이 아니다.
  • 보기 방법은 REST 프레임워크의 Response 대상을 되돌려주고 보기는 응답 데이터 설정(render)이 전방 요구에 부합되는 형식을 설정합니다.
  • APIView가 as 를 다시 썼습니다.view 메서드, View의 as 호출view 방법, csrf 사용하지 않기
  • APIView는 디스패치 방법을 다시 쓰고 리퀘스트를 2차 봉인하여 발송하기 전에 요청에 대해 신분인증, 권한 검사, 데이터 제어를 실시한다.

  • 정의된 속성 지원
  • authentication_classes 목록 또는 원조, 신분인증 클래스
  • permissoin_classes 목록 또는 원조, 권한 검사 클래스
  • throttle_classes 목록 또는 원조, 유량 제어 클래스
  • APIView에서 get(),post() 또는 다른 요청 방식을 일반적인 클래스 보기 정의 방법으로 구현합니다.
    from rest_framework.views import APIView
    from rest_framework.response import Response
    
    # url(r'^books/$', views.BookListView.as_view()),
    class BookListView(APIView):
        def get(self, request):
            books = BookInfo.objects.all()
            serializer = BookInfoSerializer(books, many=True)
            return Response(serializer.data

    GenericAPIView 일반 뷰 클래스
    rest_framework.generics.GenericAPIView
    
    APIVIew를 계승하여 APIView와 완전히 호환되며 주로 서열화기와 데이터베이스 조회를 조작하는 방법을 추가했고 다음 Mixin 확장 클래스의 실행에 방법 지원을 제공한다.일반적으로 를 사용할 때는 하나 이상의 Mixin 확장 클래스와 함께 사용할 수 있습니다.
    세 가지 속성과 방법
    속성
  • queryset은 사용하는 데이터 조회 집합을 가리킨다
  • serializer_class는 보기에 사용할 서열화기를 가리킨다
  • lookup_field 지정 pk
  • 방법:
  • get_queryset () 클래스 속성queryset에서 모델의queryset 데이터 가져오기
  • get_object () 클래스 속성queryset에서 모델의queryset 데이터를 얻어 유명한 그룹 Pk를 통해 유일한 조작 대상을 확정합니다
  • get_serializer () 종속성 serializerclass에서serializer의 서열화 클래스 획득
  • 사용
  • urls.py
  • urlpatterns = [
        url(r'^v2/books/$', views.BookGenericAPIView.as_view()),
        url(r'^v2/books/(?P.*)/$', views.BookGenericAPIView.as_view()),
    ]
    # BookGenericAPIView.as_view() =>     APIView as_view() => View as_view() => APIView dispatch    
  • views.py
  • from rest_framework.generics import GenericAPIView
    # BookGenericAPIView.as_view() =>     APIView as_view() => View as_view() => APIView dispatch    
    class BookGenericAPIView(GenericAPIView):
        queryset = models.Book.objects.filter(is_delete=False)
        serializer_class = serializers.BookModelSerializer
        lookup_field = 'pk'  #       lookup_field = 'pk'  
        
        #   :
        def get(self, request, *args, **kwargs):
            book_query = self.get_queryset()  #     queryset  ,  model  queryset  
            book_ser = self.get_serializer(book_query, many=True)  #    BookModelSerializer   
            book_data = book_ser.data
            return APIResponse(results=book_data)
        
        #   :
        def get(self, request, *args, **kwargs):
            book_obj = self.get_object()  #     queryset  ,   lookup_field  ,  model         ( :  )
            book_ser = self.get_serializer(book_obj)
            book_data = book_ser.data
            return APIResponse(results=book_data)

    좋은 웹페이지 즐겨찾기