Django REST framework은 Django 프레임워크를 통해 웹 API를 빌드하고 제공하는데 사용되는 강력한 도구입니다. 이 프레임워크는 데이터 필터링 및 정렬 기능을 제공하여 사용자가 API 결과를 원하는 방식으로 조회 및 정렬할 수 있도록 도와줍니다.
필터링
Django REST framework에서의 필터링은 주어진 조건에 부합하는 결과만을 반환하는 기능입니다. 이를 통해 사용자는 API 결과를 원하는 방식으로 제한할 수 있습니다.
Query Parameters를 이용한 필터링
가장 간단한 필터링 방법은 query parameters를 사용하는 것입니다. 사용자는 URL에 query parameters를 추가하여 원하는 조건을 지정하고, 서버는 해당 조건에 맞는 결과만을 반환합니다.
예를 들어, /products?category=electronics&price__lte=100
와 같은 URL은 “electronics” 카테고리의 제품 중 가격이 100 이하인 제품들만을 반환하도록 필터링할 수 있습니다.
Django ORM을 이용한 필터링
Django REST framework은 Django의 ORM을 기반으로 하기 때문에, ORM을 사용하여 좀 더 복잡한 필터링도 가능합니다. ORM을 사용하면 여러 필드나 연산자를 조합해서 원하는 조건을 만들 수 있습니다.
예를 들어, 아래와 같은 Django ORM 쿼리를 사용하여 필터링할 수 있습니다:
from django.db.models import Q
Product.objects.filter(Q(category='electronics') & Q(price__lte=100))
이렇게 함께 사용하는 Q
객체를 이용하면 여러 개의 필터 조건을 조합할 수 있습니다.
정렬
Django REST framework를 사용하면 API 결과를 원하는 순서로 정렬할 수 있습니다. 정렬은 결과를 사용자에게 더 유용하고 직관적으로 제시할 수 있도록 도와줍니다.
OrderingFilter를 이용한 정렬
Django REST framework은 OrderingFilter
클래스를 제공하여 API 결과를 정렬하는 기능을 제공합니다. 이 클래스를 사용하면 사용자는 URL의 query parameters를 통해 원하는 정렬 순서를 지정할 수 있습니다.
개발자는 OrderingFilter
를 사용하려면 다음과 같이 설정해야 합니다:
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
],
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle',
],
'DEFAULT_THROTTLE_RATES': {
'anon': '100/minute',
'user': '1000/minute',
},
'DEFAULT_METADATA_CLASS': 'rest_framework.metadata.SimpleMetadata',
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning',
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
}
이제 OrderingFilter
를 사용하여 원하는 필드에 대해 정렬할 수 있습니다:
from rest_framework.filters import OrderingFilter
class ProductListAPIView(ListAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_backends = [OrderingFilter]
ordering_fields = ['name', 'price']
위의 코드에서 ordering_fields
를 사용하여 허용할 정렬 필드를 정의합니다.
결론
Django REST framework을 사용하면 데이터 필터링과 정렬 기능을 손쉽게 구현할 수 있습니다. 필터링을 통해 사용자는 원하는 조건에 맞는 결과만을 선택할 수 있고, 정렬을 통해 결과를 적절한 순서로 제시할 수 있습니다. 이러한 기능은 사용자 경험을 향상시키고 API의 유용성을 높일 수 있습니다.
더 많은 정보를 원한다면, Django REST framework 공식 문서를 참조하세요.