Django rest framework分頁接口實(shí)現(xiàn)原理解析
如果沒有設(shè)置分頁,django-rest-framework 會將所有資源類表序列化后返回,如果資源很多,就會對網(wǎng)站性能造成影響。為此,我們來給博客文章列表 API 添加分頁功能。
django-rest-framework 為分頁功能提供了多個輔助類,常用的有:
PageNumberPagination
將資源分為第 1 頁、第 2 頁...第 n 頁,使用頁碼號請求分頁結(jié)果。
LimitOffsetPagination
通過 limit 和 offset 兩個參數(shù)來控制請求的資源。例如通過發(fā)送 API 請求:/posts/?offset=20&limit=5,將獲取文章資源列表第 20 篇后的 5 篇文章。如果 offset 以等差數(shù)列遞增,limit 保持不變,則等價(jià)于按頁碼分頁。但 offset 和 limit 可以為任意值,因此這種分頁比 PageNumberPagination 更加靈活。
要使用分頁功能非常簡單,只需在項(xiàng)目的配置文件中配置好分頁選項(xiàng),即可全局啟用分頁功能。打開 config/common.py 配置文件,寫入如下的分頁配置:
REST_FRAMEWORK = { # 設(shè)置 DEFAULT_PAGINATION_CLASS 后,將全局啟用分頁,所有 List 接口的返回結(jié)果都會被分頁。 # 如果想單獨(dú)控制每個接口的分頁情況,可不設(shè)置這個選項(xiàng),而是在視圖函數(shù)中進(jìn)行配置 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # 這個選項(xiàng)控制分頁后每頁的資源個數(shù) 'PAGE_SIZE': 10,}
配置完成之后,所有通用視圖函數(shù)或者視圖集生成的資源列表 API,返回的資源列表都會被分頁。配置文件中的分頁設(shè)置將作用于全局,如果某個視圖函數(shù)或者視圖集不想使用全局配置怎么辦呢?可以在視圖函數(shù)或者視圖集中設(shè)置 pagination_class 屬性,指定需要使用的分頁輔助類即可。例如將博客文章列表分頁替換為 limit offset 的分頁方式,可以這樣設(shè)置:
from rest_framewrok.pagination import PageNumberPaginationclass PostViewSet(viewsets.GenericViewSet): pagination_class = LimitOffsetPagination
這樣,PostViewSet 視圖集將返回 limit offset 分頁形式的文章列表,而其他視圖或者視圖集仍將使用全局的分頁配置。
請求文章 api,返回結(jié)果如下:
對返回結(jié)果的解釋:
count:總資源數(shù)目
next:下一頁資源的鏈接
previous:上一頁資源的鏈接
results:當(dāng)前頁的資源列表
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)2. Jsp+Servlet實(shí)現(xiàn)文件上傳下載 文件列表展示(二)3. 基于PHP做個圖片防盜鏈4. XML在語音合成中的應(yīng)用5. Jsp servlet驗(yàn)證碼工具類分享6. HTML5實(shí)戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)7. 基于javaweb+jsp實(shí)現(xiàn)企業(yè)車輛管理系統(tǒng)8. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫金額)的函數(shù)9. asp.net core 認(rèn)證和授權(quán)實(shí)例詳解10. jscript與vbscript 操作XML元素屬性的代碼
