中间复合使用示例
让我们假设我们有一个复杂的 api,有许多通用视图和一些通用视图集。我们希望为每个视图启用 PageNumberPagination,除了一个(通用视图或视图集,没有区别)我们想要一个 LimitOffsetPagination 的自定义情况。
要实现这一目标,我们需要:
-
在
settings.py上,我们将放置默认分页,以便为每个通用视图/视图集启用它,我们将PAGE_SIZE设置为 50 个项目:REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 50 } -
现在在我们的
views.py(或另一个.pyex: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。