在使用Django rest_framework下 需要自定义前端返回数据的格式
比如说 使用PageNumberPagination 时返回的数据在results中 但是前端用的都是data 前端接口数量多的时候就比较麻烦了
在此之前 你应当和我一样 知道了 使用get方式请求def的接口;
同时本文只在自己用的PageNumberPagination 上作修改 其他的分页器 没有测试
其他表述
- drf 自定义返回数据格式
- 自定义分页数据格式
- 自定义分页改
- 更改默认Pagination返回的results
处理方式
对于前端请求的格式 如果是 url?page=1&limit=10
来表示页面的数量 后端默认的是page
;通过继承类来完成定义
from rest_framework.pagination import PageNumberPagination
class AdaptPagination(PageNumberPagination):
page_size = 10 # 每页数目
page_query_param = 'page' # 前端发送的页数关键字名,默认为"page"
page_size_query_param = 'limit' # 前端发送的每页数目关键字名,默认为None
之后再setting中配置使用的分页器
REST_FRAMEWORK = {
//.....
'DEFAULT_PAGINATION_CLASS': 'qincheng.exception.custom_exception_handler',
}
进一步加上返回格式的处理;查看源码复制出get_paginated_response
;get_paginated_response_schema
这两个函数到我们自定义的函数里面去 实现自己数据的定义 例如将 results 改成 data
from rest_framework.pagination import PageNumberPagination
class AdaptPagination(PageNumberPagination):
page_size = 10 # 每页数目
page_query_param = 'page' # 前端发送的页数关键字名,默认为"page"
page_size_query_param = 'limit' # 前端发送的每页数目关键字名,默认为None
def get_paginated_response(self, data):
return Response(OrderedDict([
('count', self.page.paginator.count),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('data', data)
]))
def get_paginated_response_schema(self, schema):
return {
'type': 'object',
'properties': {
'count': {
'type': 'integer',
'example': 123,
},
'next': {
'type': 'string',
'nullable': True,
'format': 'uri',
'example': 'http://api.example.org/accounts/?{page_query_param}=4'.format(
page_query_param=self.page_query_param)
},
'previous': {
'type': 'string',
'nullable': True,
'format': 'uri',
'example': 'http://api.example.org/accounts/?{page_query_param}=2'.format(
page_query_param=self.page_query_param)
},
'data': schema,
},
}
发表评论
共 0 条评论
暂无评论