π pagination μ체λ μ½λ€.
λλ get μμ²μ λ΄μ©μ λ°λΌ νμ΄μ§μμ μΈκΈ°μ μ λ ¬, μ΅μ μ μ λ ¬μ νλ €κ³ νμ΄μ λνμ κ²ͺμμ§λ§ ν΄κ²°νλ€.
μΌλ¨ κΈ°λ³Έμ μ pagination λΆν° μ 리νλ €κ³ νλ€.
π μΌλ¨ rest framework org ν΄λΉ μ¬μ΄νΈλ₯Ό μ λ νλ κ²μ μΆμ²νλ€. λ§ λ°λΌμ°λ건 μ¬μΈ μ μμ΄λ μ²μ μ¬μ©ν λλ μ΄λ €μΈ μ μλ€. 10λΆλ§ λμΆ© μ½μ΄λ κ°μ΄ μ¨λ€.
π settings.py
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 }
paginationμ μ μμΌλ‘ μ€μ νλ λ°©λ²μ΄λ€.
μνλ paginationμ μ¨μ€ ν (3κ°μ§) viewμμ μ‘°κΈλ§ 건λλ €μ£Όλ©΄ λλ€.
ν μ€νΈ ν΄λ³΄κΈ°λ μ’μ§λ§ μ€μ νλ‘μ νΈμ μ μ© μμ μ΄λΌλ©΄ λ€λ₯Έ λ°©λ²μ μΆμ²
π views.py
from rest_framework.pagination import PageNumberPagination from rest_framework.generics import ListAPIView @permission_classes((permissions.AllowAny,)) class ArticleView(ListAPIView): pagination_class = PageNumberPagination serializer_class = ArticleSerializer queryset = ArticleModel.objects.all()
μμ κ°μ΄ μ€μ ν ν΄λΉ viewμ urlμ λ±λ‘νλ©΄ μ€μ λμ΄λ€.
κ°μ₯ μ¬μ΄ λ°©λ² λ
π settings.pyμμλ§ μ€μ ν΄μ€λ€λ©΄ μ μ μ€μ μΌλ‘ λ€μ΄κ° λͺ¨λ pagination λ μ μλ€. νμ§λ§ μ νμΌμ μ±μ μμ±ν΄μ£Όκ³ μΈλΆ μ€μ μ λ§μ Έμ€λ€λ©΄ κ΄λ¦¬κ° μ©μ΄νλ€.
pagination.pyλ₯Ό μμ± νfrom rest_framework.pagination import CursorPagination from rest_framework.pagination import PageNumberPagination class PostPageNumberPagination(PageNumberPagination): page_size = 4 class PostPageNumberPagination2(CursorPagination): page_size = 4 ordering = 'created_at' # cursor_query_param = 'page' # max_page_size = 50 # page_query_param = 'p'
μ λ°©λ²μμ settings.py μ€μ μ νμ μμΌλ μ§μμ€λ€.
π μμ κ°μ λ°©μμΌλ‘ μ²λ¦¬νλ©΄ get methodλ₯Ό λ΄ λ§μλλ‘ μ¬μ©νμ§ λͺ»νλ€.
viewμμ μ‘°κΈ λ°κΎΈμ΄ μ£Όλ©΄ λλ€.from articles.paginations import PostPageNumberPagination, PostPageNumberPagination2 from rest_framework.generics import ListAPIView @permission_classes((permissions.AllowAny,)) class ArticleView(ListAPIView): pagination_class = PostPageNumberPagination # paginations.pyμ λμ pagination serializer_class = ArticleSerializer queryset = ArticleModel.objects.all() def get(self, request): print(self.request.GET.get('temp')) # get url μμ² ν μ€νΈ self.pagination_class = PostPageNumberPagination2 # get μμ²μ λ°λΌ ifλ¬Έμ κ±Έμ΄μ μ΄λ€ μμΌλ‘ μ λ ¬ν κ±΄μ§ μ ν κ°λ₯νλ€. # number pagination κ°μ κ²½μ°λ orderbyλ‘ μλ 쿼리μ μμ κ°λ₯νκ² μ§λ§ # cursor paginationμ λΆκ°λ₯νλ€. pages = self.paginate_queryset(self.get_queryset()) serializer = self.get_serializer(pages, many=True) return self.get_paginated_response(serializer.data)
μΌλ¨ λ°©λ²μ μ°Ύμμ λ°λ‘ μ μ΄λλ€.
get url μμ²μ λ°λ₯Έ μ λ ¬ λ°©μμ if λ¬Έ κ±Έκ³ cursor μ¦ paginations.py cursorpagination μͺ½ μ΅μ μ λ€λ₯΄κ² μ£Όλ©΄ λ κ²μ΄λ€.μ΄κ±° ν μ€νΈ νλλΌ μ€λ μκ³ λ¦¬μ¦μ λͺ»νλ€...
μ°Έκ³ λ§ν¬
https://velog.io/@woodstock1993/Django-GET-API-%EB%B6%84%EC%84%9D-ListAPIView
μ°Έκ³ λ§ν¬ 2
https://drf-yasg.readthedocs.io/en/stable/custom_spec.html?highlight=PaginatorInspector