Skip to main content

Hugepagination

Hugepagination提供了在Django REST framework框架下使用的分页类和模型视图单条记录翻页功能,主要针对mysql数据库百万级+数据表进行了优化。

  • HugePagination,大数据表分页类
  • TurnpageModelMixin,为视图类ViewSet混入单条记录翻页功能

依赖

  • django >= 2.2.0
  • djangorestframework >= 3.10.0
  • django-filter >= 2.2.0

打包发布


安装

  • pip安装
pip install django-hugepagination
  • 源码安装
python setup.py install

分页类使用

分页类HugePagination必须与视图类ModelViewSet配合使用,后端数据库应当使用MySql数据库,可排序字段和查询条件字段应当建立索引。

from hugepagination.pagination import HugePagination

class MyViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    pagination_class = HugePagination
    filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
    ordering_fields = ['name','create_time']
    filterset_fields = ['name','create_time']

单条翻页功能(上一条,下一条)

TurnpageModelMixin为视图类ModelViewSet混入单条翻页功能,这个功能是列表视图的扩展,视图类增加如下方法:

next

查询指定记录的下一条记录,URL格式如下:

http://127.0.0.1/resources/1/next/ordering=create_time&name=taobao

返回数据格式:

{
    "name": "taobao",
    ...
    "create_time": "2020-10-10 12:12:01"
}

previous

查询指定记录的下一条记录,URL格式如下:

http://127.0.0.1/resources/1/previous/ordering=create_time&name=taobao

返回数据格式同上

turnpage

查询指定ID的记录数据,同时返回该记录的上一条和下一条查询URL,URL格式如下:

http://127.0.0.1/resources/5/turnpage/ordering=create_time&name=taobao

返回数据格式如下:

{
    "next": "http://127.0.0.1/resources/4/turnpage/ordering=create_time&name=taobao",
    "previous": "http://127.0.0.1/resources/6/turnpage/ordering=create_time&name=taobao",
    "data": {
        "name": "taobao",
        ...
        "create_time": "2020-10-10 12:12:01"        
    }
}

代码示例

from hugepagination.pagination import HugePagination, TurnpageModelMixin

class MyViewSet(viewsets.ModelViewSet, TurnpageModelMixin):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    pagination_class = HugePagination
    filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
    ordering_fields = ['name','create_time']
    filterset_fields = ['name','create_time']

WEB服务器存在URL重写或者反向代理,返回URL与实际访问URL不一致,处理方法

在django配置文件中增加配置项ORIGINAL_URI_MAP,该配置是list,包含三个元素,依次指定包含源请求URL的scheme,host,path三个部分的http header。响应结果将根据http header修改。

ORIGINAL_URI_MAP = ['X-Scheme','X-Forwarded-Host','X-Original-Uri']

也可以在视图中配置属性original_uri_map,格式通上。 视图中属性优先于配置文件。

注意事项

  • 如果要保持列表显示记录的顺序和翻页显示记录的顺序一致,那么排序条件和筛选条件应当与列表查询保持一致。
  • 翻页查询使用next和previous方法,应当避免在获取上一条和下一条前修改当前记录的排序字段值;这种情况建议用turnpage方法。

Metadata

Release files for django-hugepagination 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-hugepagination 1.0.2
File Size Uploaded
django-hugepagination-1.0.2.tar.gz 8.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-hugepagination 1.0.2
File Interpreter ABI Platform
django_hugepagination-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 17.4 kB

Release files / django-hugepagination-1.0.2.tar.gz

Download URL django-hugepagination-1.0.2.tar.gz
Size 8.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9b7b4347aeb0e2bf5e1a063a7b1c67985a3ad14ff4594a649497b98f9b642e4a
BLAKE2b-256 checksum
How to use checksums
006909f683bc5e29952b266d8b02b615beb64d947ec440e6fb76aa8bef35fb3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.0

Release files / django_hugepagination-1.0.2-py3-none-any.whl

Download URL django_hugepagination-1.0.2-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0e945f24264f0b5948c6f2058a63d7ee53b3e37da6202415e67978bb25fba9ee
BLAKE2b-256 checksum
How to use checksums
fe835a197ba1bf2d3e72b5683b6cad48aee29a974a0a44f42f35b906905a09cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.0

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

1 release file

1.0.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page