在 Web 開發(fā)中,處理大量數(shù)據(jù)是非常常見的。但是,如果一次性返回所有數(shù)據(jù),不僅會(huì)增加服務(wù)器的負(fù)擔(dān),而且還會(huì)影響客戶端的響應(yīng)時(shí)間。為了解決這個(gè)問題,分頁被廣泛應(yīng)用于 Web 應(yīng)用程序中,特別是在 RESTful API 中。
在 Django REST Framework 中,分頁器是一種允許我們將查詢結(jié)果劃分為多個(gè)頁面,并將每個(gè)頁面的數(shù)據(jù)返回給客戶端的工具。
基于頁碼的分頁器將查詢結(jié)果劃分為多個(gè)頁面,并使用頁碼來標(biāo)識(shí)每個(gè)頁面??蛻舳丝梢栽诓樵儏?shù)中指定要請(qǐng)求的頁面數(shù),以及每個(gè)頁面返回的對(duì)象數(shù)量。Django REST Framework 中內(nèi)置了兩種基于頁碼的分頁器:PageNumberPagination
和 LimitOffsetPagination
。
(資料圖片)
PageNumberPagination
PageNumberPagination
分頁器是基于頁碼的分頁器,允許客戶端使用頁碼和每頁返回的對(duì)象數(shù)量來請(qǐng)求不同的數(shù)據(jù)范圍。以下是一個(gè)簡單的使用 PageNumberPagination
分頁器的示例:
from rest_framework.pagination import PageNumberPaginationclass BookPagination(PageNumberPagination): page_size = 10 page_query_param = "page" max_page_size = 100class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination
在這個(gè)例子中,我們創(chuàng)建了一個(gè)名為 BookPagination
的分頁器類,并指定了默認(rèn)的頁面大小為 10,并將 page_query_param
屬性設(shè)置為 page
,以便使用 page
參數(shù)作為頁碼參數(shù)。我們還為客戶端指定了可以在查詢參數(shù)中使用的 page
和 page_size
參數(shù),并設(shè)置了最大頁面大小為 100。最后,我們將 BookPagination
分頁器類添加到 BookViewSet
視圖集合中。
現(xiàn)在,當(dāng)客戶端發(fā)起請(qǐng)求時(shí),我們的 BookViewSet
視圖集合將使用 BookPagination
分頁器將查詢結(jié)果劃分為多個(gè)頁面,并將每個(gè)頁面的數(shù)據(jù)返回給客戶端。客戶端可以在查詢參數(shù)中指定 page
和 page_size
參數(shù)來請(qǐng)求不同的數(shù)據(jù)范圍。
LimitOffsetPagination
LimitOffsetPagination
分頁器也是一種基于頁碼的分頁器,但與 PageNumberPagination
不同的是,它允許客戶端指定一個(gè)偏移量和每頁返回的對(duì)象數(shù)量來請(qǐng)求數(shù)據(jù)。以下是一個(gè)簡單的使用 LimitOffsetPagination
分頁器的示例:
from rest_framework.pagination import LimitOffsetPaginationclass BookPagination(LimitOffsetPagination): default_limit = 10 limit_query_param = "limit" offset_query_param = "offset" max_limit = 100class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination
在這個(gè)例子中,我們創(chuàng)建了一個(gè)名為 BookPagination
的分頁器類,并指定了默認(rèn)的頁面大小為 10,并將 limit_query_param
和 offset_query_param
分別設(shè)置為 limit
和 offset
,以便客戶端可以使用 limit
和 offset
參數(shù)來請(qǐng)求數(shù)據(jù)。我們還指定了最大限制為 100,并將 BookPagination
分頁器類添加到 BookViewSet
視圖集合中。
現(xiàn)在,當(dāng)客戶端發(fā)起請(qǐng)求時(shí),我們的 BookViewSet
視圖集合將使用 LimitOffsetPagination
分頁器將查詢結(jié)果劃分為多個(gè)頁面,并將每個(gè)頁面的數(shù)據(jù)返回給客戶端??蛻舳丝梢栽诓樵儏?shù)中指定 limit
和 offset
參數(shù)來請(qǐng)求不同的數(shù)據(jù)范圍。
基于游標(biāo)的分頁器與基于頁碼的分頁器不同,它使用一個(gè)游標(biāo)來標(biāo)識(shí)要返回的數(shù)據(jù)范圍。在客戶端發(fā)送第一次請(qǐng)求時(shí),服務(wù)器返回一組數(shù)據(jù)和一個(gè)游標(biāo)??蛻舳耸褂眠@個(gè)游標(biāo)來請(qǐng)求下一組數(shù)據(jù)。以下是一個(gè)簡單的使用 CursorPagination
分頁器的示例:
from rest_framework.pagination import CursorPaginationclass BookPagination(CursorPagination): page_size = 10 ordering = "title"class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination
在這個(gè)例子中,我們創(chuàng)建了一個(gè)名為 BookPagination
的分頁器類,并指定了默認(rèn)的頁面大小為 10,并將 ordering
屬性設(shè)置為 title
,以便按標(biāo)題排序。最后,我們將 BookPagination
分頁器類添加到 BookViewSet
視圖集合中。
現(xiàn)在,當(dāng)客戶端發(fā)起請(qǐng)求時(shí),我們的 BookViewSet
視圖集合將使用 CursorPagination
分頁器將查詢結(jié)果劃分為多個(gè)頁面,并將每個(gè)頁面的數(shù)據(jù)返回給客戶端??蛻舳丝梢允褂?next
和 previous
參數(shù)來請(qǐng)求下一頁和上一頁。
在 Django REST Framework 中,分頁器是一種將查詢結(jié)果劃分為多個(gè)頁面并將每個(gè)頁面的數(shù)據(jù)返回給客戶端的工具。Django REST Framework 中內(nèi)置了兩種分頁器,即基于頁碼的分頁器和基于游標(biāo)的分頁器。在使用分頁器時(shí),我們可以指定默認(rèn)的頁面大小、頁面參數(shù)和最大頁面大小等屬性,以及按特定的字段排序等選項(xiàng)。
標(biāo)簽:
在Web開發(fā)中,處理大量數(shù)據(jù)是非常常見的。但是,如果一次性返回所有...
宋朝接受南唐朝貢,無人敢做押伴使,宋太祖定一人:可我不識(shí)字啊,宋...
什么情況?有“鋰”就跌,多股應(yīng)聲跌停中石油、中石化逆勢大漲
歡迎觀看本篇文章,小勉來為大家解答以上問題。清炒白蘿卜做法,如...
為貫徹落實(shí)市委經(jīng)濟(jì)工作會(huì)議精神,強(qiáng)力推進(jìn)盤龍區(qū)“一把手”招商,4...
多地發(fā)布2023年供地計(jì)劃,宅地供應(yīng)縮量明顯,商品住宅,土地供應(yīng),供地...
AI數(shù)字員工“晶晶”為客戶提供四大服務(wù),有效提高線上業(yè)務(wù)辦理效率...
近日,由ToysforBob開發(fā)動(dòng)視發(fā)行的4v4團(tuán)隊(duì)在線多人游戲《古惑狼團(tuán)隊(duì)...
4月25日福建富寶騰達(dá)氫氟酸裝置運(yùn)行穩(wěn)定,廠家氫氟酸產(chǎn)銷穩(wěn)定,廠家...
4月15-17日,由中國食品科學(xué)技術(shù)學(xué)會(huì)果蔬加工技術(shù)分會(huì)和非熱加工技...
多元化資本運(yùn)作央企上市公司資產(chǎn)整合提速,股權(quán),央企,股票,上市公司,...
2023年度葉集區(qū)為進(jìn)一步擴(kuò)大就業(yè)見習(xí),第二批征集5家見習(xí)基地共開發(fā)...
近日,新能源發(fā)展再度迎來實(shí)質(zhì)性的政策利好,給低迷多時(shí)的新能源板...
NBA季后賽首輪G4,熱火119-114擊敗雄鹿拿到賽點(diǎn)。此役,吉米-巴特勒...
四月的春風(fēng)中,一大批綜藝節(jié)目扎堆回歸。近日,無論是傳統(tǒng)的電視綜...
最美人間四月天,正是賞花觀鳥的好時(shí)節(jié)。崇明的濕地野趣,鷺鳥紛飛...
公募基金一季報(bào)披露完畢。據(jù)Wind統(tǒng)計(jì),與2022年末相比,公募基金A股...
中證網(wǎng)訊(王珞)4月24日晚間,大洋生物發(fā)布2022年年度報(bào)告。年報(bào)顯...
?五一假期臨近,“酒店刺客”成了消費(fèi)者熱議的話題。你知道什么是...
據(jù)火箭記者M(jìn)arkBerman報(bào)道,NBA消息人士透露,火箭昨日就主教練職位...
?漳州市公安局交通警察支隊(duì)原政委、二級(jí)高級(jí)警長蔡文鴻涉嫌嚴(yán)重違...
搜狐娛樂訊近日,沈夢辰在節(jié)目中透露,老公杜海濤曾因會(huì)生氣她對(duì)自...
大學(xué)生與小學(xué)生攜手成立詩社,首創(chuàng)“大小”一體化詩詞研學(xué)模式
近日,中建玖合北京區(qū)域黨支部、紀(jì)檢小組邀請(qǐng)人民日?qǐng)?bào)社智庫工作負(fù)...
春日經(jīng)濟(jì)別樣紅——感受街頭巷尾的煙火氣,
在嶗山風(fēng)景區(qū),結(jié)合“品質(zhì)提升”“文化賦能”等舉措,景區(qū)今年一季...
2023上海車展開幕第二日,日產(chǎn)Pathfinder概念車正式首發(fā),新車專為...
郴州“智慧監(jiān)察”根治欠薪頑疾今年來已為勞動(dòng)者追發(fā)工資等3337萬余...
在快節(jié)奏的現(xiàn)代社會(huì)中,越來越多的人,尤其是年輕女性,面臨著失眠...
在對(duì)14位頭為主播直播帶貨消費(fèi)維權(quán)輿情數(shù)據(jù)進(jìn)行分析后發(fā)現(xiàn),瘋狂小...
廣告
X 關(guān)閉
廣告
X 關(guān)閉