티스토리 뷰

$ pip install django-filter

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': (
        'django_filters.rest_framework.DjangoFilterBackend',
        'rest_framework.filters.SearchFilter',
        'rest_framework.filters.OrderingFilter',
    ),
}

DEFAULT_FILTER_BACKENDS

  • rest_framework.filters.BaseFilterBackend: 필드 필터링 기능을 제공. 앞서 설치한 django-filter 패키지를 사용. 필터링할 수 있는 필드 세트를 지정하거나 좀 더 사용자 정의된 설정이 들어간 rest_framework.filters.FilterSet 클래스를 만들어 뷰와 연결할 수 있다.
  • rest_framework.filters.SearchFilter: 단일 쿼리 매개 변수 기반 검색 기능을 제공하며 장고 관리자의 검색 함수에 기반을 둔다. 검색에 포함할 필드 세트를 지정할 수 있으며, 클라이언트는 단일 쿼리로 이 필드를 검색하는 쿼리를 만들어 항목을 필터링할 수 있다. 요청에서 단일 쿼리로 여러 필드를 검색할 경우에 유용.
  • rest_framework.filters.OrderingFilter: 이 클래스를 사용하면 클라이언트가 단일 쿼리 매개 변수를 사용해 결과를 정렬하는 방법을 제어할 수 있다. 또한 정렬한 필드를 지정할 수도 있다.

위에 열거한 클래스 중 하나를 튜플에 포함시켜 필터 백엔드를 구성하고 이를 제네릭 뷰 클래스의 filter_backends 클래스 속성에 할당할 수도 있다.

 

필터링, 검색, 정렬 기능에서 사용할 수 있게 구성한 필드는 신중해야 한다. 그 구성은 데이터베이스에서 실행되는 쿼리에 영향을 미치므로 실행될 쿼리를 고려해 적절한 데이터베이트 최적화가 이루어져야 한다.

# views.py
class GameCategoryList(generics.ListCreateAPIView):
    queryset = GameCategory.objects.all()
    serializer_class = GameCategorySerializer
    name = 'gamecategory-list'
    throttle_scope = 'game-categories'
    throttle_classes = (ScopedRateThrottle,)
    filter_fields = ('name',)
    search_fields = ('^name',)
    ordering_fields = ('name',)
  • filter_fields: 필터링할 수 있는 필드 이름을 나타내는 값의 튜플을 지정. 장고 레스트 프레임워크는 내부에서 자동으로 rest_framework.filters.FilterSet 클래스를 생성하고 이를 GameCategoryList 뷰에 연결. 이렇게 하면 name 필드를 기준으로 필터링할 수 있다.
  • search_fields: 검색용 텍스트 타입 필드 이름을 나타내는 문자열의 튜플을 지정. 여기서는 이름 필드에 대해서만 검색하고 시작 부분 일치 검색을 수행할 것이다. 필드 일므의 접두사로 포함시킨 '^'은 검색 동작을 시작 부분 일치로 제한하는 것을 나타냄.
  • ordering_fileds: 클라이언트가 결과를 정렬하기 위해 지정할 수 있는 필드 이름을 나타내는 값의 튜플. 클라이언트가 정렬을 위한 필드를 지정하지 않은 경우, 응답은 뷰 관련 모델에 표시된 기본 정렬 필드를 사용할 것이다. 

오래된 버전이라 수정필요

'Django' 카테고리의 다른 글

Rest Framework Views  (0) 2019.08.29
Serializer  (0) 2019.08.29
인증, 권한, 스로틀링에 대한 이해  (0) 2019.08.28
TIME_ZONE vs USE_TZ  (0) 2019.08.27
Django 시작 프로그램?  (0) 2019.08.27
최근에 올라온 글
글 보관함