*이 글은 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
'나는 이렇게 본다 > Django REST framework' 카테고리의 다른 글
Generic views - Methods (0) | 2022.02.15 |
---|---|
Function Based Views (0) | 2022.02.11 |
Class-based Views (0) | 2022.02.10 |