1. 程式人生 > >第 6 篇:django rest framework 分頁介面

第 6 篇:django rest framework 分頁介面

![](https://img2020.cnblogs.com/blog/759200/202004/759200-20200415161158343-1662112908.jpg) 作者:[HelloGitHub-追夢人物](https://www.zmrenwu.com) 如果沒有設定分頁,django-rest-framework 會將所有資源類表序列化後返回,如果資源很多,就會對網站效能造成影響。為此,我們來給部落格文章列表 API 新增分頁功能。 django-rest-framework 為分頁功能提供了多個輔助類,常用的有: - `PageNumberPagination` 將資源分為第 1 頁、第 2 頁...第 n 頁,使用頁碼號請求分頁結果。 - `LimitOffsetPagination` 通過 `limit` 和 `offset` 兩個引數來控制請求的資源。例如通過傳送 API 請求:/posts/?offset=20&limit=5,將獲取文章資源列表第 20 篇後的 5 篇文章。如果 offset 以等差數列遞增,limit 保持不變,則等價於按頁碼分頁。但 offset 和 limit 可以為任意值,因此這種分頁比 `PageNumberPagination` 更加靈活。 要使用分頁功能非常簡單,只需在專案的配置檔案中配置好分頁選項,即可全域性啟用分頁功能。開啟 config/common.py 配置檔案,寫入如下的分頁配置: ```python REST_FRAMEWORK = { # 設定 DEFAULT_PAGINATION_CLASS 後,將全域性啟用分頁,所有 List 介面的返回結果都會被分頁。 # 如果想單獨控制每個介面的分頁情況,可不設定這個選項,而是在檢視函式中進行配置 "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", # 這個選項控制分頁後每頁的資源個數 "PAGE_SIZE": 10, } ``` 配置完成之後,所有通用檢視函式或者檢視集生成的資源列表 API,返回的資源列表都會被分頁。配置檔案中的分頁設定將作用於全域性,如果某個檢視函式或者檢視集不想使用全域性配置怎麼辦呢?可以在檢視函式或者檢視集中設定 pagination_class 屬性,指定需要使用的分頁輔助類即可。例如將部落格文章列表分頁替換為 limit offset 的分頁方式,可以這樣設定: ```python from rest_framewrok.pagination import PageNumberPagination class PostViewSet(viewsets.GenericViewSet): pagination_class = LimitOffsetPagination ``` 這樣,`PostViewSet` 檢視集將返回 limit offset 分頁形式的文章列表,而其他檢視或者檢視集仍將使用全域性的分頁配置。 請求文章 api,返回結果如下: ![](https://blog-1253812787.cos.ap-chengdu.myqcloud.com/page_number_pagination.png) 對返回結果的解釋: count:總資源數目 next:下一頁資源的連結 previous:上一頁資源的連結 results:當前頁的資源列表 --- ![](https://img2018.cnblogs.com/blog/759200/202002/759200-20200213201956024-782757549.png) **關注公眾號加入交流群**