DRF的分頁
爲何要使用分頁
其實這個不說你們都知道,你們寫項目的時候也是必定會用的,
咱們數據庫有幾千萬條數據,這些數據須要展現,咱們不可能直接從數據庫把數據所有讀取出來,
這樣會給內存形成特別大的壓力,有可能還會內存溢出,因此咱們但願一點一點的取,
那展現的時候也是同樣的,老是要進行分頁顯示,咱們以前本身都寫過度頁。
那麼你們想一個問題,在數據量特別大的時候,咱們的分頁會越日後讀取速度越慢,
當有一千萬條數據,我要看最後一頁的內容的時候,怎麼能讓個人查詢速度變快。
DRF給咱們提供了三種分頁方式,咱們看下他們都是什麼樣的
DRF提供的三種分頁
1
|
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
|
全局配置數據庫
1 2 3
|
REST_FRAMEWORK = { 'PAGE_SIZE': 2 }
|
第一種
PageNumberPagination 看第n頁,每頁顯示n條數據
http://127.0.0.1:8000/book?page=2&size=1restful
自定義分頁類
1 2 3 4 5
|
class MyPageNumber(PageNumberPagination): page_size = 2 |
視圖
1 2 3 4 5 6 7 8 9
|
class BookView(APIView): def get(self, request): book_list = Book.objects.all() |
返回帶頁碼連接的響應
1 2 3 4 5 6 7 8 9 10 11
|
class BookView(APIView): def get(self, request): book_list = Book.objects.all() |
第二中
LimitOffsetPagination 在第n個位置 向後查看n條數據
http://127.0.0.1:8000/book?offset=2&limit=1ide
自定義的分頁類
1 2 3 4 5
|
class MyLimitOffset(LimitOffsetPagination): default_limit = 1 limit_query_param = 'limit' offset_query_param = 'offset' max_limit = 999
|
視圖
第三種
CursorPagination 加密遊標的分頁 把上一頁和下一頁的id記住post
自定義分頁類
1 2 3 4
|
class MyCursorPagination(CursorPagination): cursor_query_param = 'cursor' page_size = 1 ordering = '-id'
|
視圖
1 2 3 4 5 6 7 8 9 10 11
|
class BookView(APIView): def get(self, request): book_list = Book.objects.all() |