django 각종view 계승 방식

3801 단어 django
다양한 보기view 계승 방식
1. APIVIEW
계승djangoview, 클래스 기반 보기, 구별 및 방법 기반 보기
from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth.models import User

class ListUsers(APIView):
    """
    View to list all users in the system.

    * Requires token authentication.
    * Only admin users are able to access this view.
    """

    def get(self, request, format=None):
        """
        Return a list of all users.
        """
        usernames = [user.username for user in User.objects.all()]
        return Response(usernames)
    
    def put((self, request, format=None):
        pass

2. GenericAPIView
APIVIEW에서 상속되며, APIVIew에서 상속되며, 목록 보기와 상세 보기에 사용할 수 있는 일반적인 지원 방법이 추가되었습니다.일반적으로 한 개 이상의 Mixin 확장 클래스와 함께 사용 가능
하위 클래스:.CreateAPIView . ListAPIView . RetrieveAPIView . DestroyAPIView . UpdateAPIView …
정의된 속성을 지원합니다.
목록 보기와 상세 보기 통용queryset 목록 보기의 조회집serializerclass 보기에 사용되는 서열화기
  • 목록 보기 사용:paginationclass 페이지 나누기 제어 클래스 Filterbackends 필터 제어 백엔드
  • 상세 정보 페이지 보기 사용:lookupfield 단일 데이터베이스 대상을 조회할 때 사용하는 조건 필드입니다. 기본값은'pk'lookupurl_kwarg에서 단일 데이터를 조회할 때 URL의 매개 변수 키워드 이름, 기본값과lookfield 동일
  • from rest_framework.mixins import ListModelMixin
    from django_filters.rest_framework import DjangoFilterBackend
    
    class LargeResultsSetPagination(PageNumberPagination):
        page_size = 1000
        page_size_query_param = 'page_size'
        max_page_size = 10000
        
        
    class BookView(ListModelMixin,mixins.CreateModelMixin, GenericAPIView):
    
        queryset = BookInfo.objects.all()
        serializer_class = BookInfoSerializer
        filter_backends = filter_backends = (DjangoFilterBackend,)
        filter_fields = ('category', 'in_stock')
        #    
        search_fields = ('username', 'email')
        #  
        pagination_class = LargeResultsSetPagination
    
        def get(self, request):
            return self.list(request)
            
        def post(self, request, *args, **kwargs):
            return self.create(request, *args, **kwargs)
            
    ---------------------------------------------------------
    url(r"books/$",views.BookView.as_view()),
            
    

    3. Mixins
  • ListModelMixin
  • CreateModelMixin
  • class BookDetailView(RetrieveModelMixin, GenericAPIView):
        queryset = BookInfo.objects.all()
        serializer_class = BookInfoSerializer
     
        def get(self, request, pk):
            return self.retrieve(request)
    
    
  • RetrieveModelMixin
  • UpdateModelMixin
  • DestroyModelMixin

  • 4.viewset ViewSet 보기 집합 클래스는 get(),post() 등의 방법을 실현하지 않고 list(),create() 등 동작을 as 로 실행합니다view
    class UserViewSet(viewsets.ViewSet):
        """
        Example empty viewset demonstrating the standard
        actions that will be handled by a router class.
    
        If you're using format suffixes, make sure to also include
        the `format=None` keyword argument for each action.
        """
    
        def list(self, request):
            pass
    
        def create(self, request):
            pass
    
        def retrieve(self, request, pk=None):
            pass
    
        def update(self, request, pk=None):
            pass
    
        def partial_update(self, request, pk=None):
            pass
    
        def destroy(self, request, pk=None):
            pass
    ----------------------------------
    url   
    
    user_list = UserViewSet.as_view({'get': 'list'})
    user_detail = UserViewSet.as_view({'get': 'retrieve'})
      
    from myapp.views import UserViewSet
    from rest_framework.routers import DefaultRouter
    
    router = DefaultRouter()
    router.register(r'users', UserViewSet, base_name='user')
    urlpatterns = router.urls
    

    좋은 웹페이지 즐겨찾기