第 6 篇:分頁接口

做者:HelloGitHub-追夢人物web

若是沒有設置分頁,django-rest-framework 會將全部資源類表序列化後返回,若是資源不少,就會對網站性能形成影響。爲此,咱們來給博客文章列表 API 添加分頁功能。django

django-rest-framework 爲分頁功能提供了多個輔助類,經常使用的有:api

  • PageNumberPagination編輯器

    將資源分爲第 1 頁、第 2 頁...第 n 頁,使用頁碼號請求分頁結果。函數

  • LimitOffsetPaginationpost

    經過 limitoffset 兩個參數來控制請求的資源。例如經過發送 API 請求:/posts/?offset=20&limit=5,將獲取文章資源列表第 20 篇後的 5 篇文章。若是 offset 以等差數列遞增,limit 保持不變,則等價於按頁碼分頁。但 offset 和 limit 能夠爲任意值,所以這種分頁比 PageNumberPagination 更加靈活。性能

要使用分頁功能很是簡單,只需在項目的配置文件中配置好分頁選項,便可全局啓用分頁功能。打開 config/common.py 配置文件,寫入以下的分頁配置:網站

REST_FRAMEWORK = {
 # 設置 DEFAULT_PAGINATION_CLASS 後,將全局啓用分頁,全部 List 接口的返回結果都會被分頁。  # 若是想單獨控制每一個接口的分頁狀況,可不設置這個選項,而是在視圖函數中進行配置  "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",  # 這個選項控制分頁後每頁的資源個數  "PAGE_SIZE": 10, } 複製代碼

配置完成以後,全部通用視圖函數或者視圖集生成的資源列表 API,返回的資源列表都會被分頁。配置文件中的分頁設置將做用於全局,若是某個視圖函數或者視圖集不想使用全局配置怎麼辦呢?能夠在視圖函數或者視圖集中設置 pagination_class 屬性,指定須要使用的分頁輔助類便可。例如將博客文章列表分頁替換爲 limit offset 的分頁方式,能夠這樣設置:spa

from rest_framewrok.pagination import PageNumberPagination
 class PostViewSet(viewsets.GenericViewSet):  pagination_class = LimitOffsetPagination 複製代碼

這樣,PostViewSet 視圖集將返回 limit offset 分頁形式的文章列表,而其餘視圖或者視圖集仍將使用全局的分頁配置。rest

請求文章 api,返回結果以下:

對返回結果的解釋:

count:總資源數目

next:下一頁資源的連接

previous:上一頁資源的連接

results:當前頁的資源列表


關注公衆號加入交流羣
相關文章
相關標籤/搜索