• 展示课程


    展示课程

    1. .创建course模型

      1. 创建用户模型course

        • python ../manage.py startapp course # 创建course模型
          
      2. 在setting.py中注册course模型(第一步)

        •   INSTALLED_APPS = [
            		'apps.course.apps.CourseConfig',
            ]
            
          
      3. syl/urls.py添加路由(第二步)

        • urlpatterns = [
          	path('course/', include('course.urls')),
          ]
          
          
      4. 4 创建 course/urls.py路由文件(第三步)

        • from django.urls import path, re_path
          from . import views
          urlpatterns = [
          
          ]
          
    2. syl/utils/MyBaseModel.py增加抽象基 类

      • """
        author:翔翔
        date:
        use:
        """
        from django.db import models
        
        
        class Base(models.Model):
            create_time = models.DateTimeField('创建时间', auto_now_add=True, null=True)
            update_time = models.DateTimeField('更新时间', auto_now=True, null=True)
        
            class Meta:
                abstract = True
        
        
    3. .课程主页面3张表

      1. 所需包

        • from django.db import models
          from utils.MyBaseModel import Base
          
      2. 分类表

        • 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
          
      3. 标签表

        • 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
          
      4. 课程表

        • class Course(Base):
             STATUS = (
              ('0', '即将上线'),
                 ('1', '已上线'),
              ('2', '已下线'),
             )
             title = models.CharField('课程名', max_length=24)
             desc = models.CharField('课程描述', max_length=256)
             img = models.ImageField('课程logo', upload_to='course', 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
          
      5. 章表

        •  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
          
      6. 节表

        • 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.FileField("上传视频", upload_to="videos/%Y%m%d/", blank=True, max_length=1024)
           seq_num = models.IntegerField("序号", default=1)
          
              class Meta:
                  db_table = 'tb_sections'
          
              def __str__(self):
                  return self.title
          
    4. course/admin.py注册后台管理

      • from django.contrib import admin
        from . import models
        
        admin.site.register(models.CourseType)
        admin.site.register(models.CourseTag)
        admin.site.register(models.Course)
        admin.site.register(models.Sections)
        admin.site.register(models.Chapters)
        
      1. 迁移表

        • python manage.py makemigrations
          python manage.py migrate
          
    5. 增加media文件配置

      1. syl/settings.py

        • MEDIA_URL = '/media/'
          MEDIA_ROOT = os.path.join(BASE_DIR, 'media') #
          #/teach/shiyanlou_project/syl/media
          
      2. syl/urls.py

        • from django.conf.urls.static import static
          from syl import settings
          urlpatterns = [
          
          ]
          urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
          
      3. 放一个测试图片到 syl/media/1.jpg 中

        • http://192.168.56.100:8888/media/1.jpg
          
    6. 接口开发

      1. course/urls.py 添加路由

        • """
          author:翔翔
          date:
          use:
          """
          from . import views
          from rest_framework.routers import DefaultRouter
          router = DefaultRouter()  # 有根路由
          router.register(r'type', views.CourseTypeViewSet)  # 写路由
          router.register(r'tag', views.CourseTagViewSet)
          router.register(r'course', views.CourseViewSet)
          
          urlpatterns = [
          
          ]
          urlpatterns += router.urls  # 把两个路由列表相加
          
      2. course/serializers.py 写序列化器

        • from rest_framework import serializers
          from .models import *
          
          
          class CourseTypeSerializer(serializers.ModelSerializer):
              class Meta:
                  model = CourseType
                  fields = '__all__'
          
          
          
          
          class CourseTagSerializer(serializers.ModelSerializer):
              class Meta:
                  model = CourseTag
                  fields = '__all__'
          
          
          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. course/views.py 添加视图函数

        • from .serializers import *
          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 PageNum(PageNumberPagination):
              page_size_query_param = 'page_size'
          
          
          class CourseTypeViewSet(viewsets.ModelViewSet):
              queryset = CourseType.objects.all()
              serializer_class = CourseTypeSerializer
          
          
          class CourseTagViewSet(viewsets.ModelViewSet):
              queryset = CourseTag.objects.all()
              serializer_class = CourseTagSerializer
          
          
          
          
          
          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
                      
          class SectionsViewSet(viewsets.ModelViewSet):
              queryset = Sections.objects.all()
              serializer_class = SectionsSerializer
          
          
      4. 接口

        1. 分类

        2. 标签

        3. 课程

        4. 获取具体课程章节信息

        5. 视屏video

  • 相关阅读:
    搜索引擎ElasticSearch系列(四): ElasticSearch2.4.4 sql插件安装
    搜索引擎ElasticSearch系列(三): ElasticSearch2.4.4 bigdesk插件安装
    搜索引擎ElasticSearch系列(二): ElasticSearch2.4.4 Head插件安装
    搜索引擎ElasticSearch系列(一): ElasticSearch2.4.4环境搭建
    LumiSoft.Net 收发邮件
    搜索引擎Solr6.2.1 索引富文本(word/pdf/txt/html)
    用异或提取出数组中的单独数
    买卖股票的最佳时机 II
    二叉树的路径总和
    SpringBeanUtils的部分方法类
  • 原文地址:https://www.cnblogs.com/wyx-zy/p/14012634.html
Copyright © 2020-2023  润新知