国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

DRF 分頁器的使用

這篇具有很好參考價值的文章主要介紹了DRF 分頁器的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

drf提供了三個內(nèi)置分頁器,根據(jù)前端需求選擇使用。

全局配置

在配置文件中設(shè)置全局的分頁方式,如:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100  # 每頁數(shù)目
}

也可通過繼承內(nèi)置的分頁器類自定義Pagination類,來為視圖添加不同分頁器。在視圖中通過pagination_clas屬性來指明。

class LargeResultsSetPagination(PageNumberPagination):
    page_size = 10
    page_query_param = 'page'
    page_size_query_param = 'size'
    max_page_size = 30
    
class BookDetailView(RetrieveAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    pagination_class = LargeResultsSetPagination		# 局部指定使用分頁器

注意:視圖內(nèi)局部設(shè)置不使用分頁器

pagination_class = None

內(nèi)置分頁器的使用有兩種方式,

  • 一種是直接使用內(nèi)置的,在全局配置分頁器的屬性參數(shù),控制分頁的效果。
  • 一種是繼承內(nèi)置的分頁器類,在繼承的子類中設(shè)置分頁器的屬性參數(shù),控制分頁效果。

上述配置方式適用于內(nèi)置的即繼承內(nèi)置的所有分頁器的使用。需要注意的是基于APIView的視圖需要自己手動添加分頁器對象;基于ListAPIView的視圖(繼承GenericAPIView和視圖插件的視圖類以及視圖集合類都可使用)僅通過參數(shù)pagination_class配置分頁器即可使用。

PageNumberPagination

前端訪問網(wǎng)址形式:

GET  http://127.0.0.1:8000/students/?page=4

可以在子類中定義的屬性:

  • page_size 每頁數(shù)目
  • page_query_param 前端發(fā)送的頁數(shù)關(guān)鍵字名,默認(rèn)為”page”
  • page_size_query_param 前端發(fā)送的每頁數(shù)目關(guān)鍵字名,默認(rèn)為None
  • max_page_size 前端最多能設(shè)置的每頁數(shù)量
# APIView
from rest_framework.pagination import PageNumberPagination
# 一 基本使用:url=url=http://127.0.0.1:8000/pager/?page=2&size=3,size無效
class  Pager(APIView):
    def get(self,request,*args,**kwargs):
        # 獲取所有數(shù)據(jù)
        ret=models.Book.objects.all()
        # 創(chuàng)建分頁對象
        page=PageNumberPagination()
        # 在數(shù)據(jù)庫中獲取分頁的數(shù)據(jù)
        page_list=page.paginate_queryset(ret,request,view=self)
        # 對分頁進(jìn)行序列化
        ser=BookSerializer1(instance=page_list,many=True)
        return Response(ser.data)
    
    
# 二 自定制分頁器類, url=http://127.0.0.1:8000/pager/?page=2&size=3
# size=30,無效,最多5條
class Mypage(PageNumberPagination):
    page_size = 2
    page_query_param = 'page'
    page_size_query_param = 'size'		 # 定制傳參
    max_page_size = 5					# 每頁最大的數(shù)據(jù)量
    

class Pager(APIView):
    def get(self,request,*args,**kwargs):
        ret=models.Book.objects.all()
        page=Mypage()	# 創(chuàng)建分頁對象
        page_list=page.paginate_queryset(ret,request,view=self)	# 在數(shù)據(jù)庫中獲取分頁的數(shù)據(jù)
        ser=BookSerializer1(instance=page_list,many=True)	# 對分頁進(jìn)行序列化
        # return Response(ser.data)
        # 這個也是返回Response對象,但是比基本的多了上一頁,下一頁,和總數(shù)據(jù)條數(shù)(了解即可)
        return page.get_paginated_response(ser.data)
      
# ListAPIView
# 聲明分頁的配置類,即可使用
from rest_framework.pagination import PageNumberPagination
class StandardPageNumberPagination(PageNumberPagination):
   
    page_size = 2
    page_size_query_param = "size"
    max_page_size = 10
    page_query_param = "p"

class StudentAPIView(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentModelSerializer
    pagination_class = StandardPageNumberPagination		
# 127.0.0.1/four/students/?p=1&size=5

LimitOffsetPagination

前端訪問網(wǎng)址形式:

GET http://127.0.0.1/four/students/?limit=100&offset=400

可以在子類中定義的屬性:

  • default_limit 默認(rèn)限制,默認(rèn)值與PAGE_SIZE設(shè)置一直
  • limit_query_param limit參數(shù)名,默認(rèn)’limit’
  • offset_query_param offset參數(shù)名,默認(rèn)’offset’
  • max_limit 最大limit限制,默認(rèn)None
# APIView
# http://127.0.0.1:8000/pager/?offset=4&limit=3
from rest_framework.pagination import LimitOffsetPagination
# 也可以自定制,同簡單分頁
class  Pager(APIView):
    def get(self,request,*args,**kwargs):
        # 獲取所有數(shù)據(jù)
        ret=models.Book.objects.all()
        # 創(chuàng)建分頁對象
        page=LimitOffsetPagination()
        # 在數(shù)據(jù)庫中獲取分頁的數(shù)據(jù)
        page_list=page.paginate_queryset(ret,request,view=self)
        # 對分頁進(jìn)行序列化
        ser=BookSerializer1(instance=page_list,many=True)
        # return page.get_paginated_response(ser.data)
        return Response(ser.data)
    
#ListAPIView
from rest_framework.pagination import LimitOffsetPagination
class StandardLimitOffsetPagination(LimitOffsetPagination):
    # 默認(rèn)每一頁查詢的數(shù)據(jù)量,類似上面的page_size
    default_limit = 2
    limit_query_param = "size"
    offset_query_param = "start"

class StudentAPIView(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentModelSerializer
    # 調(diào)用頁碼分頁類
    # pagination_class = StandardPageNumberPagination
    # 調(diào)用查詢偏移分頁類
    pagination_class = StandardLimitOffsetPagination

CursorPagination

這種分頁方式只有上一頁和下一頁,不能跳躍切換頁面,但是查詢效率極高。

前端訪問網(wǎng)址形式:

GET http://127.0.0.1/four/students/?cursor=cD0xNQ%3D%3D

可以在子類中定義的屬性:文章來源地址http://www.zghlxwxcb.cn/news/detail-437420.html

  • cursor_query_param:默認(rèn)查詢字段,不需要修改
  • page_size:每頁數(shù)目
  • ordering:按什么排序,需要指定,逆序在字段前加負(fù)號:ordering='-id'
#APIView
from rest_framework.pagination import CursorPagination
# 看源碼,是通過sql查詢,大于id和小于id
class  Pager(APIView):
    def get(self,request,*args,**kwargs):
        # 獲取所有數(shù)據(jù)
        ret=models.Book.objects.all()
        # 創(chuàng)建分頁對象
        page=CursorPagination()
        page.ordering='nid'
        # 在數(shù)據(jù)庫中獲取分頁的數(shù)據(jù)
        page_list=page.paginate_queryset(ret,request,view=self)
        # 對分頁進(jìn)行序列化
        ser=BookSerializer1(instance=page_list,many=True)
        # 可以避免頁碼被猜到
        return page.get_paginated_response(ser.data)
    
    
# ListAPIView
class MyCursorPagination(CursorPagination):
    page_size=2
    ordering='-id'	
from rest_framework.generics import ListAPIView
class AuthorListView(ListAPIView):
    serializer_class = serializers.AuthorModelSerializer
    queryset = models.Author.objects.filter(is_delete=False)
    pagination_class =MyCursorPagination

到了這里,關(guān)于DRF 分頁器的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue電商項(xiàng)目--分頁器制作

    Vue電商項(xiàng)目--分頁器制作

    分頁這個組件,不單單是一個頁面用到了。多個頁面同時用它,因此我們可以封裝成一個全局組件 需要將這個分頁結(jié)構(gòu)拆分到components? 通用的分頁組件Pagination ?然后全局的注冊這個組件 ?有點(diǎn)小問題,改一下。讓它上一頁在1前面,和居中? 這里要注意的一點(diǎn)就是這個newOrde

    2024年02月06日
    瀏覽(30)
  • 【代碼】表格封裝 + 高級查詢 + 搜索 +分頁器 (極簡)
  • vue 分頁器組件+css動畫效果

    vue 分頁器組件+css動畫效果

    全網(wǎng)都找了一遍沒有找到符合UI需求的分頁動畫,于是就主動上手了 需求: 1、分頁最多顯示9頁,總頁數(shù)最多顯示無上限; 2、點(diǎn)擊下一頁的時候需要有動畫效果過度,如果當(dāng)前頁數(shù)是當(dāng)前顯示最后的一頁,則停了當(dāng)前顯示最后的位置,但是點(diǎn)擊下一頁的時候需要用戶感知 效

    2024年02月09日
    瀏覽(24)
  • elementui 分頁器,el-pagination 不顯示的問題

    elementui 分頁器,el-pagination 不顯示的問題

    今天敲代碼遇到了個很操蛋的問題,我把分頁器封裝成共用組件,一個組件顯示分頁器,另一個組件不顯示分頁器,我心想這么邪門的嗎,這個是正常組件 這個組件不顯示 然后我嘗試把傳給分頁器的參數(shù)打印出來, 果然發(fā)現(xiàn)了操蛋的地方,這是正常顯示的數(shù)據(jù) 這是不顯示的

    2024年02月12日
    瀏覽(18)
  • element-UI 分頁器Bug,切換頁碼,頁碼改變但是頁碼高亮未變化

    element-UI 分頁器Bug,切換頁碼,頁碼改變但是頁碼高亮未變化

    Element-UI提供了分頁器的兩個方法,handleSizeChange和handleCurrentChange,然而在實(shí)際使用中,卻發(fā)現(xiàn)再切換頁面展示數(shù)量的時候,會出現(xiàn)一些BUG, 頁面刷新了,高亮頁碼卻還是上次選擇的頁面。可以用以下方法解決; 翻看element文檔中發(fā)現(xiàn)有current-page,當(dāng)前頁數(shù),支持 .sync 修飾符

    2024年02月16日
    瀏覽(24)
  • DRF03-權(quán)限與分頁

    創(chuàng)建一個新的子應(yīng)用 opt 注冊子應(yīng)用 總路由,代碼: 子路由,代碼: 因?yàn)榻酉聛淼恼J(rèn)證組件中需要使用到登陸功能,所以我們使用django內(nèi)置admin站點(diǎn)并創(chuàng)建一個管理員. admin運(yùn)營站點(diǎn)的訪問地址:http://127.0.0.1:8000/admin 創(chuàng)建管理員以后,訪問admin站點(diǎn),先修改站點(diǎn)的語言配置

    2024年02月09日
    瀏覽(40)
  • spring使用內(nèi)置jetty創(chuàng)建提供http接口服務(wù)

    spring使用內(nèi)置jetty創(chuàng)建提供http接口服務(wù)

    通過mvc:annotation-driven/配置,Spring MVC會啟用對注解的支持,使得可以在控制器類和方法上使用注解來定義請求映射、參數(shù)綁定等操作。 具體來說,mvc:annotation-driven/會啟用以下功能: 支持@Controller注解,用于標(biāo)識控制器類 支持@RequestMapping注解,用于定義請求映射 支持@RequestP

    2024年04月15日
    瀏覽(25)
  • 七、Django DRF框架GenericAPIView--搜索&排序&分頁&返回值

    上一章: 六、DRF框架APIView--requestresponse解析器渲染器_做測試的喵醬的博客-CSDN博客 下一章: APIView 繼承?View GenericAPIView 繼承?APIView。 GenericAPIView 功能: ? ? a.具備View的所有特性 ? ? b.具備了APIView中的認(rèn)證、授權(quán)、限流功能 ? ? c.還支持對于獲取列表數(shù)據(jù)接口的功能:搜索

    2024年02月08日
    瀏覽(29)
  • 解決:element-ui分頁器在將最后一頁列表數(shù)據(jù)刪完時,頁面不刷新到最新數(shù)據(jù)

    解決:element-ui分頁器在將最后一頁列表數(shù)據(jù)刪完時,頁面不刷新到最新數(shù)據(jù)

    一、問題: 在用element-ui分頁器的時候,我將最后一頁列表數(shù)據(jù)刪完了,但是頁面沒刷新到最新數(shù)據(jù)。正常情況是,我刪完最后一頁數(shù)據(jù)后,分頁器停留在上一頁,并刷新列表數(shù)據(jù),以下是刪完后的頁面展現(xiàn) 網(wǎng)絡(luò)返回的數(shù)據(jù)說明 :(pageNo:當(dāng)前頁 pageSize:當(dāng)前頁展示的條數(shù)

    2024年02月20日
    瀏覽(22)
  • 關(guān)于element-ui的分頁器設(shè)置每一頁顯示數(shù)量(page-size)后頁碼并沒有變化的問題與解決

    關(guān)于element-ui的分頁器設(shè)置每一頁顯示數(shù)量(page-size)后頁碼并沒有變化的問題與解決

    問題:element-ui的分頁器在設(shè)置后,總頁面數(shù)異常,不匹配總條數(shù)與單頁顯示數(shù),設(shè)置page-size后頁面也無變化 對應(yīng)的參數(shù): ? 對應(yīng)的樣式: 原因: page-size設(shè)置的值,是page-sizes數(shù)組中有的值,如果page-size的數(shù)值是page-sizes的數(shù)組里面沒有值的,那么就會默認(rèn)取page-sizes當(dāng)中的第一個

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包