主要包含分頁,搜尋,排序,分類,區間
系統基礎分頁器
from rest_framework import pagination
class freecourselistviewset(listmodelmixin,genericviewset):
queryset = models.course.objects.filter(is_delete=false,is_show=true).all()
serializer_class = serializers.coursemodelserializer
pagination_class = pagination.pagenumberpagination
pagination.pagenumberpagination.page_size = 2
自定義基礎分頁器
views.py
from . import paginations
class freecourselistviewset(listmodelmixin,genericviewset):
queryset = models.course.objects.filter(is_delete=false,is_show=true).all()
serializer_class = serializers.coursemodelserializer
pagination_class = paginations.pagenumberpagination
paginations.py
from rest_framework import pagination
class pagenumberpagination(pagination.pagenumberpagination):
page_size = 2 #使用者配置每頁顯示幾條資料
page_query_param = 'page' #查詢頁面的關鍵字 eg page =1 第一頁
page_size_query_param = 'page_size' #使用者配置每頁幾條資料
max_page_size = 3 #最多可以顯示幾條資料
指定偏移幾個資料,後面的幾個資料展示
自定義偏移分頁器
views.py
from . import paginations
class freecourselistviewset(listmodelmixin,genericviewset):
queryset = models.course.objects.filter(is_delete=false,is_show=true).all()
serializer_class = serializers.coursemodelserializer
pagination_class = paginations.limitoffsetpagination
paginations.py
class limitoffsetpagination(pagination.limitoffsetpagination):
# 預設一頁顯示的條數
default_limit = 2
# 使用者自定義一頁顯示的條數
limit_query_param = 'limit'
# 使用者自定義偏移的條數
offset_query_param = 'offset'
# 使用者最大可自定義一頁顯示的條數
max_limit = 10
介面使用分頁器前後的response的格式不一樣
分頁前:資料在response.data中
分頁後:資料在response.data.results中
過濾類(包括searchfilter,和orderingfilter)有filter_queryset(self, request, queryset, view)方法,返回queryset物件.
首先配置過濾器類
filter_backends = [searchfilter, orderingfilter, djangofilterbackend]
searchfilter元件
配置搜尋字段
filter_backends = [searchfilter]
search_fields = ['name', 'brief']#欄位必須都是資料庫表字段
前端介面
介面:/?search=搜尋關鍵字
orderingfilter元件
配置排序字段
filter_backends = [orderingfilter]
ordering_fields = ['price', 'id', 'students'] #欄位必須都是資料庫表字段
前端介面
?ordering=price 按**公升序
?ordering=-price,id 按**降序,**相同時按主鍵公升序
drf自帶的元件無法完成分類和區間,需要借助django-filter模組
安裝
pip install django-filter
配置
# django-filter外掛程式的djangofilterbackend元件:
from django_filters.rest_framework import djangofilterbackend
# 第一種配置,配置字段:
filter_fields = ['course_category']
# 第二個配置,配置類
filter_class = coursefilterset
filters.py中
from django_filters.filterset import filterset
from django_filters import filters
from . import models
class coursefilterset(filterset):
# 實現區間:field_name關聯model表屬性,lookup_expr設定過濾規則
min_price = filters.numberfilter(field_name='price', lookup_expr='gte')
max_price = filters.numberfilter(field_name='price', lookup_expr='lte')
class meta:
model = models.course
# min_price 和 max_price 自定義規則字段可以不在fields中配置
#資料路欄位必須配置
fields = ['course_category']
filter_backends = [myfilter]
filters.py
# 自定義過濾器:自定義普通類,實現filter_queryset可以接受request, queryset, view返回過濾處理後的queryset即可
class myfilter:
def filter_queryset(self, request, queryset, view):
# 過濾條件是死的,?count=數字,也可以寫高階一點,從view中去反射配置資訊,或者將配置資訊放在settings中
count = request.query_params.get('count', none)
if not count:
return queryset # 沒過濾
try:
count = int(count)
return queryset[:count] # 過濾
except:
return queryset # 沒過濾
DRF過濾元件
from rest framework import pagination 基礎分頁 class pagenumberpagination pagination.pagenumberpagination 預設一頁顯示的條數 page size 2 查詢頁面的關鍵字 page query param ...
drf 分頁元件
目錄可以達到檢視第幾頁以及每一頁顯示幾條的效果 from rest framework.pagination import pagenumberpagination 一 基本使用 url url 無效 class pager apiview def get self,request,args,kwa...
drf 許可權元件
目錄許可權就是某些功能只對特定的使用者開放,比如django中建立使用者可分為超級使用者和普通使用者,此時超級使用者就有許可權進入後台管理系統,而普通使用者就沒有許可權,這是怎麼做到的呢?這就是許可權元件的作用。from rest framework.permissions import basep...