from rest_framework import pagination
# 基礎分頁
class pagenumberpagination(pagination.pagenumberpagination):
# 預設一頁顯示的條數
page_size = 2
# 查詢頁面的關鍵字
page_query_param = 'page'
# 使用者自定義一頁顯示條數的關鍵字
page_size_query_param = 'page_size'
# 使用者最大可自定義一頁顯示的條數
max_page_size = 2
class limitoffsetpagination(pagination.limitoffsetpagination):
# 預設一頁顯示的條數
default_limit = 2
# 使用者自定義一頁顯示的條數
limit_query_param = 'limit'
# 使用者自定義偏移的條數
offset_query_param = 'offset'
# 使用者最大可自定義一頁顯示的條數
max_limit = 2
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
# 注:介面分頁前後,response的格式不一樣
# 分頁前:資料是response.data
# 分頁後:資料是response.data.results
群查介面的檢視類:views.py
from rest_framework.filters import searchfilter
class freecourselistviewset(listmodelmixin, genericviewset):
queryset = models.course.objects.filter(is_delete=false, is_show=true).all()
serializer_class = serializers.coursemodelserializer
# 配置搜尋元件
filter_backends = [searchfilter]
# 配置參與搜尋字段
search_fields = ['name', 'brief']
# 規則:
# 參與全文搜尋的字段為name和brief(兩個字段必須都是資料庫表字段)
# 介面:?search=搜尋關鍵字,會全文匹配name和brief兩個字段
群查介面的檢視類:views.py
from rest_framework.filters import orderingfilter
class freecourselistviewset(listmodelmixin, genericviewset):
queryset = models.course.objects.filter(is_delete=false, is_show=true).all()
serializer_class = serializers.coursemodelserializer
# 配置排序元件
filter_backends = [orderingfilter]
# 配置參與排序字段
ordering_fields = ['price', 'id', 'students']
# 規則:
# ?ordering=price 按**公升序
# ?ordering=-price 按**降序
# ?ordering=id 按主鍵公升序
# ?ordering=-price,id 按**降序,**相同時按主鍵公升序
# 自定義過濾器:自定義普通類,實現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 # 沒過濾
from .filters import myfilter
class freecourselistviewset(listmodelmixin, genericviewset):
queryset = models.course.objects.filter(is_delete=false, is_show=true).all()
serializer_class = serializers.coursemodelserializer
# 配置排序元件
filter_backends = [myfilter]
安裝django-filter外掛程式
>: pip install django-filter
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']
from django_filters.rest_framework import djangofilterbackend
from .filters import coursefilterset
class freecourselistviewset(listmodelmixin, genericviewset):
queryset = models.course.objects.filter(is_delete=false, is_show=true).all()
serializer_class = serializers.coursemodelserializer
# 配置過濾元件
filter_backends = [djangofilterbackend]
# 配置過濾規則的類
filter_class = coursefilterset
# 規則:
# ?course_category=1 課程分組1所有的課程
# ?min_price=10 課程**大於等於10的所有課程
# ?min_price=10&max_price=100 課程**大於等於10小於等於100的所有課程
drf過濾元件
主要包含分頁,搜尋,排序,分類,區間 系統基礎分頁器from rest framework import pagination class freecourselistviewset listmodelmixin,genericviewset queryset models.course.objec...
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...