• 潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)


    在线课堂

     

    一、数据库模型设计

    # 在apps/course/models.py中定义如下模型:
    from django.db import models
    
    from utils.models import ModelBase
    
    
    class Teacher(ModelBase):
        name = models.CharField(max_length=150, verbose_name="讲师姓名", help_text='讲师姓名')
        positional_title = models.CharField(max_length=150, verbose_name="职称", help_text='职称')
        profile = models.TextField(verbose_name="简介", help_text='简介')
        avatar_url = models.URLField(default="", verbose_name="头像url", help_text='头像url')
    
        class Meta:
            db_table = "tb_teachers"  # 指明数据库表名
            verbose_name = "讲师"  # 在admin站点中显示的名称
            verbose_name_plural = verbose_name  # 显示的复数名称
    
        def __str__(self):
            return self.name
    
    
    class CourseCategory(ModelBase):
        name = models.CharField(max_length=100, verbose_name="课程分类名", help_text='课程分类名')
    
        class Meta:
            db_table = "tb_course_category"  # 指明数据库表名
            verbose_name = "课程分类"  # 在admin站点中显示的名称
            verbose_name_plural = verbose_name  # 显示的复数名称
    
        def __str__(self):
            return self.name
    
    
    class Course(ModelBase):
        title = models.CharField(max_length=150, verbose_name="课程名", help_text='课程名')
        cover_url = models.URLField(verbose_name="课程封面图URL", help_text='课程封面图URL')
        video_url = models.URLField(verbose_name="课程视频URL", help_text='课程视频URL')
        duration = models.FloatField(default=0.0, verbose_name="课程时长", help_text='课程时长')
        profile = models.TextField(null=True, blank=True, verbose_name="课程简介", help_text='课程简介')
        outline = models.TextField(null=True, blank=True, verbose_name="课程大纲", help_text='课程大纲')
    
        teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL, null=True, blank=True)
        category = models.ForeignKey(CourseCategory, on_delete=models.SET_NULL, null=True, blank=True)
    
        class Meta:
            db_table = "tb_course"  # 指明数据库表名
            verbose_name = "课程"  # 在admin站点中显示的名称
            verbose_name_plural = verbose_name  # 显示的复数名称
    
        def __str__(self):
            return self.title
    

      

      

    二、百度云VOD点播功能

    1.简介

    百度 VOD (Video On Demand) 是百度云 BCE (Baidu Cloud Engine) 提供的面向音视频点播的 PaaS (Platform as a Service) 服务平台,为开发者提供音视频文件的存储、管理及播放服务。您无需了解音视频存储、转码、加密、分发、播放等技术细节,即可快速搭建安全可靠、高可定制的点播平台和应用。

     

    2.注册登录上传测试视频

    • 打开百度云:https://cloud.baidu.com/

    • 可以使用已有的百度云盘账号登录

    • 下载百度云APP到手机中,使用刷脸认证

    • 认证成功之后,会赠送55元的VOD视频点播券

    • 开通"视频点播VOD"服务

    上传测试视频 

     

    # 在mysql数据库中添加你们自己的测试数据(如下数据仅仅是案例,不能正常导入)
    
    insert into tb_teachers (name, positional_title, profile, avatar_url, create_time, update_time, is_delete) values
    ('Youkou', 'python高级讲师', '讲师简介', '/media/youkou.jpg', now(), now(), 0);
    
    
    insert into tb_course_category (name, create_time, update_time, is_delete) values
    ('python基础', now(), now(), 0), 
    ('python高级', now(), now(), 0), 
    ('python框架', now(), now(), 0);
    
    
    insert into tb_course (title, cover_url, video_url, duration, `profile`, outline, teacher_id, category_id, create_time, update_time, is_delete) values
    ('你的测试视频1名称', '你的测试视频缩略图URL', '你的测试视频URL', 10.5, '你的测试视频简介', '你的视频大纲', 1, 2, now(), now(), 0),
    
    ('你的测试视频2名称', '你的测试视频缩略图URL', '你的测试视频URL', '你的测试视频时长为浮点型', '你的测试视频简介', '你的视频大纲', 1, 2, now(), now(), 0);
    

      

    三、后端功能实现

    课程列表视图

    # 在apps/course/views.py中定义如下类视图:

    # 在apps/course/views.py中定义如下类视图:
    
    from django.shortcuts import render
    from . import models
    
    
    def course_list(request):
        courses = models.Course.objects.only('title', 'cover_url', 'teacher__positional_title').filter(is_delete=False)
        return render(request, 'course/course.html', locals())
    

      课程详情视图

    # 在apps/course/views.py中定义如下类视图:
    
    from django.http import Http404
    from django.shortcuts import render
    from django.views import View
    
    from . import models
    
    logger = logging.getLogger('django')
    
    
    class CourseDetailView(View):
        """
        """
        def get(self, request, course_id):
            try:
                course = models.Course.objects.only('title', 'cover_url', 'video_url', 'profile', 'outline',
                                                    'teacher__name', 'teacher__avatar_url',
                                                    'teacher__positional_title', 'teacher__profile').
                    select_related('teacher').filter(is_delete=False, id=course_id).first()
                return render(request, 'course/course_detail.html', locals())
            except models.Course.DoesNotExist as e:
                logger.info("当前课程出现如下异常:
    {}".format(e))
                raise Http404("此课程不存在!")
    

      

  • 相关阅读:
    Linux下查看使用的是哪种shell的方法汇总【转】
    Shell中的while循环【转】
    shell浅谈之三for、while、until循环【转】
    cpu_relax( )-----对自选循环等待(spin-wait loops)操作的优化【转】
    Linux makefile 教程 非常详细,且易懂【转】
    链表常见的问题【转】
    linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断【转】
    linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁【转】
    关于hrtimer_forward小段代码的分析【转】
    CTP多点触摸协议【转】
  • 原文地址:https://www.cnblogs.com/gdwz922/p/10212544.html
Copyright © 2020-2023  润新知