DRF分页组件
为什么要使用分页
我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输过程中耗时也会比较大。
通常我们会希望一部分一部分去请求数据,也就是我们常说的一页一页获取数据并展示出来。
DRF使用分页器
分页模式
rest framework中提供了三种分页模式:
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,1)">CursorPagination
全局配置
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': rest_framework.pagination.LimitOffsetPagination',PAGE_SIZE': 100 }
局部配置
我们可以在视图类中进行局部设置
class PublisherViewSet(ModelViewSet): queryset = models.Publisher.objects.all() serializer_class = PublisherModelSerializer pagination_class = PageNumberPagination # 注意不是列表(只能有一个分页模式
DRF内置分页器
PageNumberPagination
例如:http://127.0.0.1:8000/api/article/?page=2&size=1
分页器
MyPageNumber(PageNumberPagination): page_size = 2 每页显示多少条 page_size_query_param = size' URL中每页显示条数的参数 page_query_param = page URL中页码的参数 max_page_size = None 最大页码数限制
视图
ArticleList(APIView): def get(self,request,*args,**kwargs): res = {"code": 0} article_list = models.Article.objects.all().order_by(id) 分页 page_obj = MyPageNumber() page_article = page_obj.paginate_queryset(queryset=article_list,request=request,view=self) ser_obj = ArticleSerializer(page_article,many=True) res[data"] = ser_obj.data return Response(res)
ser_obj.data return page_obj.get_paginated_response(res)
LimitOffsetPagination
例如:http://127.0.0.1:8000/api/article/?offset=2&limit=2
分页器
offset分页 MyLimitOffset(LimitOffsetPagination): default_limit = 1 limit_query_param = limit offset_query_param = offset max_limit = 999
视图
MyLimitOffset()
page_article = page_obj.paginate_queryset(queryset=article_list,1)">return page_obj.get_paginated_response(res)
CursorPagination
分页器
加密分页 MyCursorPagination(CursorPagination): cursor_query_param = cursor page_size = 1 ordering = -id 重写要排序的字段
视图
MyCursorPagination() page_article = page_obj.paginate_queryset(queryset=article_list,1)"> return Response(res) page_obj.get_paginated_response(res)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。