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
하위 클래스에서 정의할 수 있는 속성:
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
하위 클래스에서 정의할 수 있는 속성:
PAGE_SIZE
설정이 일치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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.