1.课程主⻚⾯3张表
2.课程章节表2张表
3、表设计
courseapp/models.py
from django.db import models
from utils.MyBaseModel import Base
from userapp.models import User
#课程类别
class CourseType(Base):
title = models.CharField('课程类别', max_length=16)
sequence = models.IntegerField('展示顺序', default=10)
class Meta:
db_table = 'tb_coursetype'
def __str__(self):
return self.title
#课程标签
class CourseTag(Base):
title = models.CharField('课程标签', max_length=16)
sequence = models.IntegerField('展示顺序', default=10)
class Meta:
db_table = 'tb_coursetag'
def __str__(self):
return self.title
#课程表
class Course(Base):
STATUS = (
('0', '即将上线'),
('1', '已上线'),
('2', '已下线'),
)
title = models.CharField('课程名', max_length=24)
desc = models.CharField('课程描述', max_length=256)
img = models.CharField('课程logo', max_length=512, null=True)
course_type = models.ForeignKey(CourseType, verbose_name='课程类型', on_delete=models.SET_NULL, default=None, null=True)
course_tag = models.ManyToManyField(CourseTag, verbose_name='课程标签')
status = models.CharField('课程状态', choices=STATUS, max_length=8, default='1')
attention = models.IntegerField('关注人数', default=0)
learner = models.IntegerField('学习人数', default=0)
class Meta:
db_table = 'tb_course'
def __str__(self):
return self.title
#章表
class Chapters(Base):
title = models.CharField('章标题', max_length=24)
serial_num = models.IntegerField('章序号')
course = models.ForeignKey(Course, related_name='chapters', on_delete=models.SET_NULL, null=True)
class Meta:
db_table = 'tb_chapters'
def __str__(self):
return self.title
#节表
class Sections(Base):
title = models.CharField('节标题', max_length=24)
serial_num = models.IntegerField('节序号')
chapters = models.ForeignKey(Chapters, related_name='sections', on_delete=models.SET_NULL, null=True)
learn_time = models.IntegerField('课程时长', default=1)
video = models.CharField("上传视频", blank=True, max_length=1024,null=True)
seq_num = models.IntegerField("序号", default=1)
class Meta:
db_table = 'tb_sections'
def __str__(self):
return self.title
4、使⽤modelviewset添加类别,标签,课程,章,节等表
courseapp/serializers.py
from rest_framework import serializers
from courseapp import models
class CourserTypeSer(serializers.ModelSerializer):
class Meta:
model = models.CourseType
fields = '__all__'
class CourseTagSer(serializers.ModelSerializer):
class Meta:
model = models.CourseTag
fields = '__all__'
class CourseSer(serializers.ModelSerializer):
class Meta:
model = models.Course
fields = '__all__'
class ChaptersSer(serializers.ModelSerializer):
class Meta:
model = models.Chapters
fields = '__all__'
class SectionsSer(serializers.ModelSerializer):
class Meta:
model = models.Sections
fields = '__all__'
class ChaptersSerializer(serializers.ModelSerializer):
sections = SectionsSer(read_only=True, many=True)
class Meta:
model = models.Chapters
fields = '__all__'
class CourseDeepSerializer(serializers.ModelSerializer):
chapters = ChaptersSerializer(read_only=True, many=True)
class Meta:
model = models.Course
fields = '__all__'
courseapp/views.py
from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.pagination import PageNumberPagination
from rest_framework.views import APIView
from rest_framework.viewsets import ModelViewSet
from courseapp import models, serializers
class PageNum(PageNumberPagination):
page_size_query_param = 'page_size'
class CourseTypeView(ModelViewSet):
queryset = models.CourseType.objects.all()
serializer_class = serializers.CourserTypeSer
class CourseTagView(ModelViewSet):
queryset = models.CourseTag.objects.all()
serializer_class = serializers.CourseTagSer
class CourseView(ModelViewSet):
queryset = models.Course.objects.all()
serializer_class = serializers.CourseSer
filter_backends = (DjangoFilterBackend, OrderingFilter) # 同时支持过滤和排序
# permission_classes = [IsAuthenticated]
# 指定排序字段, 不设置, 排序功能不起效
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 == 'retrieve':
return serializers.CourseDeepSerializer
else:
return serializers.CourseSer
class ChaptersView(ModelViewSet):
queryset = models.Chapters.objects.all()
serializer_class = serializers.ChaptersSer
class SectionsView(ModelViewSet):
queryset = models.Sections.objects.all()
serializer_class = serializers.SectionsSer
courseapp/urls.py
from courseapp import views
from django.urls import path, include
from rest_framework.routers import DefaultRouter
routers = DefaultRouter()
routers.register('type', views.CourseTypeView) # 课程类别
routers.register('tag', views.CourseTagView) # 课程标签
routers.register('course', views.CourseView) # 课程
routers.register('chapter', views.ChaptersView) # 章
routers.register('sections', views.SectionsView) # 节
urlpatterns = [
path('', include(routers.urls))
]