中间复合使用示例
让我们假设我们有一个复杂的 api,有许多通用视图和一些通用视图集。我们希望为每个视图启用 PageNumberPagination
,除了一个(通用视图或视图集,没有区别)我们想要一个 LimitOffsetPagination
的自定义情况。
要实现这一目标,我们需要:
-
在
settings.py
上,我们将放置默认分页,以便为每个通用视图/视图集启用它,我们将PAGE_SIZE
设置为 50 个项目:REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 50 }
-
现在在我们的
views.py
(或另一个.py
ex:paginations.py
)中,我们需要覆盖LimitOffsetPagination
:from rest_framework.pagination import LimitOffsetPagination class MyOffsetPagination(LimitOffsetPagination): default_limit = 20 max_limit = 1000
定制的
LimitOffsetPagination
,包含 20 件商品,最多包含 1000 件商品。 -
在我们的
views.py
中,我们需要定义我们特殊视图的pagination_class
:imports ... # =================================== # PageNumberPagination classes # =================================== class FirstView(generics.ListAPIView): ... class FirstViewSet(viewsets.GenericViewSet): ... ... # =================================== # Our custom Pagination class # =================================== class IAmSpecialView(generics.ListAPIView): pagination_class = MyOffsetPagination ...
现在应用程序中的每个通用视图/视图集都有 PageNumberPagination
,除了 IAmSpecial
类,这确实是*特殊的,*并且有自己定制的 LimitOffsetPagination
。