cla*_*lay 4 pagination django-rest-framework
如果此过滤器 REST 查询没有产生任何值,它将返回带有空结果的 HTTP 200:
http://server/path/entities?field=value&page=1
Run Code Online (Sandbox Code Playgroud)
这个将返回 HTTP 404
http://server/path/entities?field=value&page=2
Run Code Online (Sandbox Code Playgroud)
显然,没有第二页结果。在这种情况下,我可以配置 django-rest 返回空的 HTTP 200,而不是 HTTP 404 吗?
GUI 允许用户向前翻页,然后更改过滤条件,这可以请求第二个 URL 并触发 HTTP 404 和用户错误。
我可以要求 GUI 团队将 404 视为空结果集,但我宁愿这只是从服务器返回空 HTTP 200。
您可以创建一个自定义分页类来拦截NotFound异常引发paginate_queryset()并返回空列表
像这样的东西
def paginate_queryset(self, queryset, request, view=None):
"""Checking NotFound exception"""
try:
return super(EmptyPagination, self).paginate_queryset(queryset, request, view=view)
except NotFound: # intercept NotFound exception
return list()
def get_paginated_response(self, data):
"""Avoid case when self does not have page properties for empty list"""
if hasattr(self, 'page') and self.page is not None:
return super(EmptyPagination, self).get_paginated_response(data)
else:
return Response(OrderedDict([
('count', None),
('next', None),
('previous', None),
('results', data)
]))
Run Code Online (Sandbox Code Playgroud)
并在配置文件中
只需告诉 DRF 使用此自定义分页类
'DEFAULT_PAGINATION_CLASS': 'apps.commons.serializers.EmptyPagination',
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1649 次 |
| 最近记录: |