1911A:課程主頁面三個介面開發
阿新 • • 發佈:2020-11-06
0.課程主頁面介面對應頁面效果
1.課程類別介面開發
1.1 course/urls.py 新增路由
from django.urls import path, re_path from rest_framework.routers import DefaultRouter # 匯入DRF得DefaultRouter from . import views router = DefaultRouter() # 有根路由 router.register(r'type', views.CourseTypeViewSet) # 寫路由 urlpatterns = [ ] urlpatterns+= router.urls # 把兩個路由列表相加
1.2 course/serializers.py 寫序列化器
from rest_framework import serializers from course.models import CourseType class CourseTypeSerializer(serializers.ModelSerializer): class Meta: model = CourseType fields = '__all__'
1.3 course/views.py 新增檢視函式
from rest_framework importviewsets from rest_framework.pagination import PageNumberPagination from course.models import * from course.serializers import * class PageNum(PageNumberPagination): page_size_query_param = 'page_size' class CourseTypeViewSet(viewsets.ModelViewSet): queryset = CourseType.objects.all() serializer_class= CourseTypeSerializer
1.4 course/admin.py 註冊後臺管理
from django.contrib import admin from . import models admin.site.register(models.CourseType)
1.5 測試介面
http://192.168.56.100:8888/course/type/
2.標籤介面開發
2.1 course/urls.py 新增路由
router.register(r'tag', views.CourseTagViewSet)
2.2 course/serializers.py 寫序列化器
from rest_framework import serializers from course.models import CourseTag class CourseTagSerializer(serializers.ModelSerializer): class Meta: model = CourseTag fields = '__all__'
2.3 course/views.py 新增檢視函式
from course.models import * from course.serializers import * class CourseTagViewSet(viewsets.ModelViewSet): queryset = CourseTag.objects.all() serializer_class = CourseTagSerializer
2.4 course/admin.py 註冊後臺管理
from django.contrib import admin from . import models admin.site.register(models.CourseTag)
2.5 測試介面
http://192.168.56.100:8888/course/tag/
3.課程介面開發
3.1 course/urls.py 新增路由
router.register(r'course', views.CourseViewSet)
3.2 course/serializers.py 寫序列化器
# -*- coding: utf-8 -*- from rest_framework import serializers from course.models import * class CourseSerializer(serializers.ModelSerializer): class Meta: model = Course fields = '__all__' # 所有欄位 class SectionsSerializer(serializers.ModelSerializer): class Meta: model = Sections fields = '__all__' class ChaptersSerializer(serializers.ModelSerializer): sections = SectionsSerializer(many=True) class Meta: model = Chapters fields = '__all__' class CourseDeepSerializer(CourseSerializer): # 欄位名名, 必須是模型可以 . 引用到的變數 # Course(). "chapters" 才能作為欄位名, 如果是集合, 需要加many=True, chapters = ChaptersSerializer(many=True)
3.3 course/views.py 新增檢視函式
from django.shortcuts import render from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets from rest_framework.filters import OrderingFilter from rest_framework.pagination import PageNumberPagination from course.models import * from course.serializers import * class CourseViewSet(viewsets.ModelViewSet): queryset = Course.objects.all() serializer_class = CourseDeepSerializer # 指定過濾方法類, 排序方法類, 一個或多個 filter_backends = (DjangoFilterBackend, OrderingFilter) # 同時支援過濾和排序 # 指定排序欄位, 不設定, 排序功能不起效 ordering_fields = ('attention', 'learner', 'create_time') # 指定過濾欄位, 不設定, 過濾功能不起效 filter_fields = ('title', 'desc', 'status', 'course_type', 'course_tag') # 自定義分頁器 覆蓋全域性配置 pagination_class = PageNum def get_serializer_class(self): if self.action == 'list': return CourseSerializer else: return CourseDeepSerializer
3.4 course/admin.py 註冊後臺管理
from django.contrib import admin from . import models admin.site.register(models.Course)
3.5 測試介面
http://192.168.56.100:8888/course/course/