分页:(Pagination)
rest_framework 中已经定义好了 3 种 分页模式
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
- PageNumberPagination
- 例如:
- 通过页码数进行分页
- LimitOffsetPagination
- 例如:
- 通过起始 结束 分页
- CursorPagination
-
- 加密的分页 让别人看不到具体的页码,页码都是随机字符串
当有特殊的配置需要代替默认的配置时,我们就自己写个类
- 继承要使用的分页模式
在单独的视图中定义分页
一些配置:
PageNumberPagination
from rest_framework.pagination import PageNumberPaginationclass MyPagination(PageNumberPagination): ''' 修改一些默认参数 ''' page_size = 1 # 每页显示多少条 page_size_query_param = 'size' # 每页显示多少条的参数key page_query_param = 'page' # URL中页码的参数 max_page_size = None # 最大页码数限制
LimitOffsetPagination
class MyLimitOffset(LimitOffsetPagination): # 默认参数 default_limit = 1 limit_query_param = 'limit' offset_query_param = 'offset' max_limit = 999
CursorPagination
# 加密分页class MyCursorPagination(CursorPagination): cursor_query_param = 'cursor' page_size = 1 ordering = '-id' # 重写要排序的字段
注意:
- queryset切片之后不能
order_by()
配置:
全局配置:
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', # 每页显示 的条数 不指定的话 会出现 warning(警告)信息 'PAGE_SIZE': 100}
局部配置
pagination_class = PageNumberPagination
解析器(Parser) 和 渲染器(renderer)
配置: 一般不需要配置 使用自己默认的就行
# 解析器 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser' ), # 渲染器 # 你要页面 我就给你页面 # 你要JSON格式的数据 我就给你JSON格式的数据 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', # 'rest_framework.renderers.BrowsableAPIRenderer', ),