Django rest framework分頁(yè)接口實(shí)現(xiàn)原理解析
如果沒(méi)有設(shè)置分頁(yè),django-rest-framework 會(huì)將所有資源類(lèi)表序列化后返回,如果資源很多,就會(huì)對(duì)網(wǎng)站性能造成影響。為此,我們來(lái)給博客文章列表 API 添加分頁(yè)功能。
django-rest-framework 為分頁(yè)功能提供了多個(gè)輔助類(lèi),常用的有:
PageNumberPagination
將資源分為第 1 頁(yè)、第 2 頁(yè)...第 n 頁(yè),使用頁(yè)碼號(hào)請(qǐng)求分頁(yè)結(jié)果。
LimitOffsetPagination
通過(guò) limit 和 offset 兩個(gè)參數(shù)來(lái)控制請(qǐng)求的資源。例如通過(guò)發(fā)送 API 請(qǐng)求:/posts/?offset=20&limit=5,將獲取文章資源列表第 20 篇后的 5 篇文章。如果 offset 以等差數(shù)列遞增,limit 保持不變,則等價(jià)于按頁(yè)碼分頁(yè)。但 offset 和 limit 可以為任意值,因此這種分頁(yè)比 PageNumberPagination 更加靈活。
要使用分頁(yè)功能非常簡(jiǎn)單,只需在項(xiàng)目的配置文件中配置好分頁(yè)選項(xiàng),即可全局啟用分頁(yè)功能。打開(kāi) config/common.py 配置文件,寫(xiě)入如下的分頁(yè)配置:
REST_FRAMEWORK = { # 設(shè)置 DEFAULT_PAGINATION_CLASS 后,將全局啟用分頁(yè),所有 List 接口的返回結(jié)果都會(huì)被分頁(yè)。 # 如果想單獨(dú)控制每個(gè)接口的分頁(yè)情況,可不設(shè)置這個(gè)選項(xiàng),而是在視圖函數(shù)中進(jìn)行配置 "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", # 這個(gè)選項(xiàng)控制分頁(yè)后每頁(yè)的資源個(gè)數(shù) "PAGE_SIZE": 10, }
配置完成之后,所有通用視圖函數(shù)或者視圖集生成的資源列表 API,返回的資源列表都會(huì)被分頁(yè)。配置文件中的分頁(yè)設(shè)置將作用于全局,如果某個(gè)視圖函數(shù)或者視圖集不想使用全局配置怎么辦呢?可以在視圖函數(shù)或者視圖集中設(shè)置 pagination_class 屬性,指定需要使用的分頁(yè)輔助類(lèi)即可。例如將博客文章列表分頁(yè)替換為 limit offset 的分頁(yè)方式,可以這樣設(shè)置:
from rest_framewrok.pagination import PageNumberPagination class PostViewSet(viewsets.GenericViewSet): pagination_class = LimitOffsetPagination
這樣,PostViewSet 視圖集將返回 limit offset 分頁(yè)形式的文章列表,而其他視圖或者視圖集仍將使用全局的分頁(yè)配置。
請(qǐng)求文章 api,返回結(jié)果如下:
對(duì)返回結(jié)果的解釋?zhuān)?/p>
count:總資源數(shù)目
next:下一頁(yè)資源的鏈接
previous:上一頁(yè)資源的鏈接
results:當(dāng)前頁(yè)的資源列表
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
TensorFlow實(shí)現(xiàn)非線性支持向量機(jī)的實(shí)現(xiàn)方法
本篇文章主要介紹了TensorFlow實(shí)現(xiàn)非線性支持向量機(jī)的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04將pycharm配置為matlab或者spyder的用法說(shuō)明
這篇文章主要介紹了將pycharm配置為matlab或者spyder的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python爬蟲(chóng)獲取全網(wǎng)招聘數(shù)據(jù)實(shí)現(xiàn)可視化分析示例詳解
這篇文章主要介紹了Python爬蟲(chóng)獲取全網(wǎng)招聘數(shù)據(jù)實(shí)現(xiàn)可視化分析示例詳解,實(shí)現(xiàn)采集一下最新的qcwu招聘數(shù)據(jù),本文列舉了部分代碼以及實(shí)現(xiàn)思路,需要的朋友可以參考下2023-07-07python3中編碼獲取網(wǎng)頁(yè)的實(shí)例方法
在本篇文章里小編給大家整理了一篇關(guān)于python3中編碼獲取網(wǎng)頁(yè)的實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)下。2020-11-11解決python matplotlib imshow無(wú)法顯示的問(wèn)題
今天小編就為大家分享一篇解決python matplotlib imshow無(wú)法顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05pandas中DataFrame檢測(cè)重復(fù)值的實(shí)現(xiàn)
本文主要介紹了pandas DataFrame檢測(cè)重復(fù)值,主要包括了檢查整行整列的檢測(cè),以及多列是否重復(fù),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05