Django restframework 필터링, 정렬, 페이지 나누기

3717 단어 Django
필터링
목록 데이터에 대해 필드에 따라 필터를 해야 할 수도 있습니다.django-fitlter 확장을 추가하여 지원을 강화할 수 있습니다.
pip insall django-filter

구성 파일에 필터 백엔드 설정을 추가하려면 다음과 같이 하십시오.
INSTALLED_APPS = [
    ...
    'django_filters',  #       ,
]

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

뷰에 Filter 추가fields 속성, 필터할 필드를 지정합니다
class BookListView(ListAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    filter_fields = ('btitle', 'bread')

# 127.0.0.1:8000/books/?btitle=   

정렬
목록 데이터에 대해 REST 프레임워크는 OrderingFilter 필터를 제공하여 데이터를 지정한 필드에 따라 정렬할 수 있도록 도와줍니다.
사용 방법:
클래스 뷰에서 Filter 설정백엔드, rest_framework.filters.OrderingFilter 필터를 사용하면 REST 프레임워크는 요청한 검색 문자열 파라미터에ordering 파라미터가 포함되어 있는지 확인하고,ordering 파라미터가 포함되면ordering 파라미터가 가리키는 정렬 필드에 따라 데이터 집합을 정렬합니다.
전단에서 전달할 수 있는ordering 매개 변수의 선택 필드 값은orderingfields에 명시되어 있습니다.
예:
class BookListView(ListAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    filter_backends = [OrderingFilter]
    ordering_fields = ('id', 'bread', 'bpub_date')

# 127.0.0.1:8000/books/?ordering=-bread

 
Page Pagination
REST 프레임워크는 페이지 나누기를 지원합니다.
구성 파일에서 다음과 같은 글로벌 페이지 나누기를 설정할 수 있습니다.
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100  #     
}

또한 Pagination 클래스를 사용자 정의하여 뷰에 페이지 나누기 동작을 추가할 수 있습니다.뷰에서는 pagination_class 속성으로 표시됩니다.
class LargeResultsSetPagination(PageNumberPagination):
    page_size = 1000
    page_size_query_param = 'page_size'
    max_page_size = 10000
class BookDetailView(RetrieveAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    pagination_class = LargeResultsSetPagination

주의: 보기에서 페이지 나누기 기능을 닫으면 보기에서 설정하기만 하면 됩니다
pagination_class = None

옵션 페이지 분할기
1) PageNumberPagination
프런트엔드 액세스 웹 주소 형식:
GET  http://api.example.org/books/?page=4

하위 클래스에서 정의할 수 있는 속성:
  • page_크기 페이지당 수
  • page_query_param 전단에서 보내는 페이지 키워드 이름입니다. 기본값은 "페이지"
  • 입니다.
  • page_size_query_param 전단에서 보내는 페이지당 키워드 이름, 기본값은 None
  • max_page_크기 전면에 설정할 수 있는 최대 페이지 수
  • from rest_framework.pagination import PageNumberPagination
    
    class StandardPageNumberPagination(PageNumberPagination):
        page_size_query_param = 'page_size'
        max_page_size = 10
    
    class BookListView(ListAPIView):
        queryset = BookInfo.objects.all().order_by('id')
        serializer_class = BookInfoSerializer
        pagination_class = StandardPageNumberPagination
    
    # 127.0.0.1/books/?page=1&page_size=2
    

    2)LimitOffsetPagination
    프런트엔드 액세스 웹 주소 형식:
    GET http://api.example.org/books/?limit=100&offset=400
    

    하위 클래스에서 정의할 수 있는 속성:
  • default_limit 기본 제한, 기본값과 PAGE_SIZE 설정이 일치
  • limit_query_param limit 매개 변수 이름, 기본'limit'
  • offset_query_param offset 매개 변수 이름, 기본'offset'
  • max_limit 최대 limit 제한, 기본 None
  • from rest_framework.pagination import LimitOffsetPagination
    
    class BookListView(ListAPIView):
        queryset = BookInfo.objects.all().order_by('id')
        serializer_class = BookInfoSerializer
        pagination_class = LimitOffsetPagination
    
    # 127.0.0.1:8000/books/?offset=3&limit=2

    좋은 웹페이지 즐겨찾기