分頁過濾組件

複習

"""
一、celery框架
	定義:異步任務框架 - 獨立運行的服務器,由三部分組成
		內部有socekt,能夠起worker(執行任務)及beat(提交任務)兩種socket
		三部分包含:存儲任務的broker + 執行任務的worker + 存儲結果的backend
		app_worker = Celery(broker, backend, include)
	
	做用:
		任務:@app.task裝飾的函數
		異步任務:任務.delay() => 處理耗時的需求
		延遲任務:任務.apply_async(args,kwargs,eta) => 處理延遲的需求
		定時任務:完成任務的beat配置,啓動beat服務 => 處理週期性的需求
		
	命令:
		celery worker -A 包|模塊 -l info -P eventlet
		celery beat -A 包|模塊 -l info
		
二、課程應用
	課程業務分析,表構建
		-- 免費課,實戰課,輕課業務線獨立(能夠分表處理)
		-- 課程表家族:課程表,分類表,老師表,章節表,課時表
		-- 分類羣查接口,課程羣查接口
"""

分頁組件

自定義分頁類完成配置:paginations.py
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
羣查接口的視圖類: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
    # 注:接口分頁先後,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 按價格降序,價格相同時按主鍵升序

自定義

自定義過濾類: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  # 沒過濾
羣查接口的視圖類:views.py
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
自定義過濾規則類:filters.py
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']
羣查接口的視圖類:views.py
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的全部課程

A做業(必作)

"""
一、整理今天所學知識點

二、複習並掌握過濾組件:排序、搜索、分類篩選、區間篩選、分頁
	完成課程羣查接口:帶排序、分頁功能
	完成課程搜索接口:帶搜索,分頁功能
	完成課程單查接口
	完成課程章節羣查接口:帶分類

三、分析並看懂前臺頁面
	課程羣查頁面
	搜索頁面
	課程詳情頁面

四、瞭解並完成七牛雲視頻託管
"""

B做業(選作)

"""
一、預習支付功能
	支付流程
	支付應用申請
	支付接口
	支付回調
二、項目上線
	服務器購買
	服務器環境
	前臺項目上線
	後臺項目上線
"""
相關文章
相關標籤/搜索