複習
"""
一、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
二、課程應用
課程業務分析,表構建
-- 免費課,實戰課,輕課業務線獨立(能夠分表處理)
-- 課程表家族:課程表,分類表,老師表,章節表,課時表
-- 分類羣查接口,課程羣查接口
"""
分頁組件
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做業(選作)
"""
一、預習支付功能
支付流程
支付應用申請
支付接口
支付回調
二、項目上線
服務器購買
服務器環境
前臺項目上線
後臺項目上線
"""