티스토리 뷰
$ 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 |
최근에 올라온 글
글 보관함