rest framework提供了分頁的支援。
我們可以在配置檔案settings.py中設定全域性的分頁方式,如:
rest_framework =
如果在檢視內關閉分頁功能,只需在檢視內設定屬性:
pagination_class = none
1.建立pahenations.py檔案,在其中自定義分頁類(基礎分頁類/偏移分頁類/游標分頁類)
2.檢視類中配置自定義的分頁類:pagination_class= 自定義分頁類
匯入pagenumberpagination類
from rest_framework.pagination import pagenumberpagination
繼承pagenumberpagination類
class mypagenumberpagination(pagenumberpagination):
# ?page=頁碼
page_query_param = 'page'
# ?page=頁面 下預設一頁顯示的條數
page_size = 3
# ?page=頁面&page_size=條數 使用者自定義一頁顯示的條數
page_size_query_param = 'page_size'
# 使用者自定義一頁顯示的條數最大限制:數值超過5也只顯示5條
max_page_size = 5
屬性:
使用:
from rest_framework.generics import listapiview
class carlistapiview(listapiview):
# 如果queryset沒有過濾條件,就必須 .all(),不然分頁會出問題
queryset = models.car.objects.all()
serializer_class = serializers.carmodelserializer
# 分頁元件 - 給檢視類配置分頁類即可 - 分頁類需要自定義,繼承drf提供的分頁類即可
pagination_class = pagenations.mypagenumberpagination
eg: /cars/?page=2?page_size=10
每頁顯示10條,共展示2頁
匯入limitoffsetpagination類
from rest_framework.pagination import limitoffsetpagination
繼承limitoffsetpagination類
class mylimitoffsetpagination(limitoffsetpagination):
# ?offset=從頭偏移的條數&limit=要顯示的條數
limit_query_param = 'limit'
offset_query_param = 'offset'
# ?不傳offset和limit預設顯示前3條,只設定offset就是從偏移位往後再顯示3條
default_limit = 3
# ?limit可以自定義一頁顯示的最大條數
max_limit = 5
# 只使用limit結合ordering可以實現排行前幾或後幾
# eg: ?ordering=-price&limit=2 => **前2
屬性:
使用:
from rest_framework.generics import listapiview
class carlistapiview(listapiview):
# 如果queryset沒有過濾條件,就必須 .all(),不然分頁會出問題
queryset = models.car.objects.all()
serializer_class = serializers.carmodelserializer
# 分頁元件 - 給檢視類配置分頁類即可 - 分頁類需要自定義,繼承drf提供的分頁類即可
pagination_class = pagenations.mylimitoffsetpagination
注:必須基於排序規則下進行分頁
1)如果介面配置了orderingfilter過濾器,那麼url中必須傳ordering
2)如果介面沒有配置orderingfilter過濾器,一定要在分頁類中宣告ordering按某個字段進行預設排序
from rest_framework.pagination import cursorpagination
class mycursorpagination(cursorpagination):
cursor_query_param = 'cursor'
page_size = 3
page_size_query_param = 'page_size'
max_page_size = 5
ordering = '-pk'
使用:
from rest_framework.generics import listapiview
class carlistapiview(listapiview):
# 如果queryset沒有過濾條件,就必須 .all(),不然分頁會出問題
queryset = models.car.objects.all()
serializer_class = serializers.carmodelserializer
# 分頁元件 - 給檢視類配置分頁類即可 - 分頁類需要自定義,繼承drf提供的分頁類即可
pagination_class = pagenations.mycursorpagination
def page_func(request, dirent_list):
new_dirent_list = sorted(dirent_list, key=lambda x:x.get("time"),reverse=true)
try:
current_page = int(request.get.get('page', '1'))
per_page = int(request.get.get('per_page', '10'))
except valueerror:
current_page = 1
per_page = 10
# 總頁數
page_count = len(new_dirent_list) // per_page
if page_count == 0:
page_count = 1
start = (current_page - 1) * per_page # 0
limit = per_page + start # 10
res_list = new_dirent_list[start:limit]
if len(new_dirent_list[limit:]) >= per_page:
has_next_page = true
else:
res_list = new_dirent_list[start:]
has_next_page = false
page_info =
return page_info, res_list
class searchdirview(apiview):
authentication_classes = (tokenauthentication, sessionauthentication)
permission_classes = (isauthenticated, )
throttle_classes = (userratethrottle, )
def get(self,request):
dirent_list = [{}, {}, {},]
page_info, res_list = page_func(request, dirent_list)
return response(
)
rest framework 中的分頁
注意這種寫法不支援api view和api view 配置setting default pagination class 2.建立乙個資料夾mypagenumberpagination class mypagenumberpagination pagenumberpagination page s...
學習週報 rest framework
本週學習情況 1.rest framework的學習 2.前後端分離5 2到5 6 下週學習計畫 停止課程內容學習 2.花10學習rest framework基礎的學習 本週完成情況 一 fbv,cbv 繼承 避免重複 1 優先順序從左往右 2 super 1.先在studentsview裡面查詢,...
rest framework登入認證
class user models.model user models.charfield max length 32 pwd models.charfield max length 32 class usertoken models.model token models.charfield max...