Django-rest-framework 接口实现 分页:(Pagination) 解析器(Parser) 渲染器(renderer)
分页:(Pagination)
rest_framework 中已经定义好了 3 种 分页模式
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
- PageNumberPagination
- 例如:http://127.0.0.1:8000/api/article/?page=2&size=1
- 通过页码数进行分页
- LimitOffsetPagination
- 例如:http://127.0.0.1:8000/api/article/?offset=2&limit=2
- 通过起始 结束 分页
- CursorPagination
-
- 加密的分页 让别人看不到具体的页码,页码都是随机字符串
当有特殊的配置需要代替默认的配置时,我们就自己写个类
- 继承要使用的分页模式
在单独的视图中定义分页
一些配置:
-
PageNumberPagination
from rest_framework.pagination import PageNumberPagination class 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',
),