코드로 우주평화

Generic views - Attributes 본문

나는 이렇게 본다/Django REST framework

Generic views - Attributes

daco2020 2022. 2. 14. 17:07

*이 글은 DRF 공식문서를 토픽별로 번역한 글입니다.

 

Generic views

장고의 제네릭 뷰... 공통적으로 사용되는 패턴들을 줄이기 위해 개발되었다.
뷰 개발에서 찾을 수 있는 일반적인 관용구와 패턴을 가져오고, 반복하지 않고도 일반적인 뷰를 빠르게 작성할 수 있도록 추상화한다.

 

 

클래스 기반 뷰의 가장 큰 이점 하나는 재사용 가능한 기능을 구성할 수 있다는 것이다.

레스트 프레임워크는 공통적으로 사용되는 패턴을 여러 내장 뷰로 제공해준다.

제네릭 뷰는 디비 모델과 밀접한 API를 빠르게 만들 수 있도록 도와한다.

만약 제네릭 뷰가 너의 API에 필요하지 않다면, 너는 일반 APIView클래스를 사용할수도 있다.

또는 믹스인과 기본클래스를 활용하여 재사용할 수 있는 제네릭 뷰를 만들 수 있다.

 

 

Examples

일반적으로 제네릭 뷰를 사용할 때, 너는 뷰를 재정의(덮어쓰기) 할 것이다. 그리고 여러 클래스 속성을 설정한다.

from django.contrib.auth.models import User
from myapp.serializers import UserSerializer
from rest_framework import generics
from rest_framework.permissions import IsAdminUser

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAdminUser]

더 복잡한 경우, 너는 뷰 클래스안에 다양한 메서드들을 재정의할 수 있다. 예를 들어.

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAdminUser]

    def list(self, request):
        # Note the use of `get_queryset()` instead of `self.queryset`
        queryset = self.get_queryset()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)

간단한 경우, 너는 .as_view() 메서드 사용하여 클래스의 속성을 넣을 수 있다. 예를 들어, 너는 URLconf에서 다음처럼 포함시킬 수 있다.

path('users/', ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name='user-list')

API Reference

GenericAPIView

GenericAPIView 클래스는 APIView 클래스를 확장한다. 표준 목록 과 디테일 뷰를에 필요한 동작을 추가한다.

각각의 제네릭 뷰는 'GenericAPIView'를 하나 이상의 믹스인 클래스와 결합하여 빌드된다.

 

 

Attributes

Basic settings:

다음 속성은 기본 뷰 동작을 제어한다.

 

  • queryset - 쿼리셋은 객체를 반환하는데 사용된다.
    • 만약 너가 뷰 메서드를 재정의해야한다면, 속성에 직접 접근하는 대신 get_queryset() 호출해야 한다.
    • 쿼리셋을 한번 평가되면, 해당 결과가 다음 요청도 캐시할 것이다.
    • 일반적으로, 속성을 설정하거나 get_queryset() 메서드를 재정의를 해야 한다.
  • serializer_class - serializer 클래스 - ‘검증’과 ‘역직렬화 입력’과 ‘직렬화 출력’을 위해 serializer 클래스를 사용한다.
    • 일반적으로, 속성을 설정하거나 get_serializer_class() 메서드를 재정의를 해야 한다.
  • lookup_field  - 개별 모델 인스턴스를 찾는데 사용하는 모델 필드이다. 기본값은 'pk'이다.
    • 하이퍼링크된 API를 사용할 때 custom value를 사용해야 하는 경우 API 뷰와 serializer 클래스가 모두 lookup fields를 설정하는지 확인해야 합니다.
    • lookup_url_kwarg - lookup_url_kwarg - 객체를 찾기위해 사용되어지는 url 키워드 인수이다
    • URL conf는 일치하는 키워드 인수를 포함해야합니다. 만약 설정하지 않으면 lookup_field 과 동일한 기본값을 사용한다.

 

 

 

Pagination:

다음 속성은 리스트 뷰와 함께 사용할 때 pagination(페이지 매김)을 조절하는데 사용된다.

  • pagination_class - 페이지네이션 클래스는 리스트 결과의 쪽수를 매길 때 사용한다.
  • pagination_class=None 으로 설정하면 뷰에 pagination이 사용되지 않는다.
  • 기본값은'rest_framework.pagination.PageNumberPagination'인  DEFAULT_PAGINATION_CLASS 설정과 동일한 값입니다.

 

Filtering:

  • filter_backends - 쿼리셋 필터링에 사용하는 클래스 리스트이다.
  • 기본값은 DEFAULT_FILTER_BACKENDS 설정과 동일합니다.

 

 


 

 

Reference

 

Views - Django REST framework

 

www.django-rest-framework.org

 

'나는 이렇게 본다 > Django REST framework' 카테고리의 다른 글

Generic views - Methods  (0) 2022.02.15
Function Based Views  (0) 2022.02.11
Class-based Views  (0) 2022.02.10