首页 > 其他 > 详细

drf-分页

时间:2020-07-14 19:49:48      阅读:64      评论:0      收藏:0      [点我收藏+]

简单使用

总路由

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path(admin/, admin.site.urls),
    path(api/, include(api.urls)),
]

应用下路由

from django.urls import path, re_path
from api import views

urlpatterns = [
    path(books2/, views.BookView.as_view()),   # 继承了ListAPIView
]

views.py

from api import models
from api.ser import BookModelSerializer
# 查所有,才需要分页
from rest_framework.generics import ListAPIView
# 内置三种分页方式
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
‘‘‘
PageNumberPagination
    page_size:每页显示的条数
‘‘‘
class BookView(ListAPIView):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    # 配置分页
    pagination_class = PageNumberPagination

settings.py

REST_FRAMEWORK = {
    PAGE_SIZE: 1,
}

自定义分页器

views.py

from api import models
from api.ser import BookModelSerializer
# 查所有,才需要分页
from rest_framework.generics import ListAPIView
# 内置三种分页方式
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
‘‘‘
PageNumberPagination
    page_size:每页显示的条数
    page_query_param:前端发送的页数关键字名称,(例如:page_query_param=‘page‘,查询时http://127.0.0.1:8000/api/books2/?page=2)   
    page_size_query_param=‘size‘:前端发送的每页数目关键字名
    max_page_size=5    # 前端最多能设置的每页数量
‘‘‘
class MyPageNumberPagination(PageNumberPagination):
    page_size = 1
    page_query_param = "aaa"

class BookView(ListAPIView):
    queryset = models.Book.objects.all().filter(is_delete=False)
    serializer_class = BookModelSerializer
    # 配置分页
    pagination_class = MyPageNumberPagination

如果用APIView分页

from api import models
from api.ser import BookModelSerializer
# 查所有,才需要分页
from rest_framework.generics import ListAPIView
# 内置三种分页方式
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
‘‘‘
PageNumberPagination
    page_size:每页显示的条数
    page_query_param:前端发送的页数关键字名称,(例如:page_query_param=‘page‘,查询时http://127.0.0.1:8000/api/books2/?page=2)   
    page_size_query_param=‘size‘:前端发送的每页数目关键字名
    max_page_size=5    # 前端最多能设置的每页数量
‘‘‘
class MyPageNumberPagination(PageNumberPagination):
    page_size = 1
    page_query_param = "aaa"

# class BookView(ListAPIView):
#     queryset = models.Book.objects.all().filter(is_delete=False)
#     serializer_class = BookModelSerializer
#     # 配置分页
#     pagination_class = MyPageNumberPagination


# 如果使用APIView分页

class BookView(APIView):
    def get(self,request,*args,**kwargs):
        book_list=models.Book.objects.all()
        # 实例化得到一个分页器对象
        page_cursor=MyPageNumberPagination()

        book_list=page_cursor.paginate_queryset(book_list,request,view=self)
        next_url =page_cursor.get_next_link()
        pr_url=page_cursor.get_previous_link()
        # print(next_url)
        # print(pr_url)
        book_ser=BookModelSerializer(book_list,many=True)
        return Response(data=book_ser.data)

 

drf-分页

原文:https://www.cnblogs.com/baicai37/p/13299362.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!