潭州课堂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("当前课程出现如下异常:\n{}".format(e))
raise Http404("此课程不存在!")
潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)的更多相关文章
- 潭州课堂25班:Ph201805201 django 项目 第三十三课 后台文章标签查询提交到前台,删除功能实现(课堂笔记)
在视图中创建个类,要实现此功能,并把结果返回前台 , from django.shortcuts import render from django.views import View from dj ...
- 潭州课堂25班:Ph201805201 django 项目 第三十课 linux 系统迁移 (课堂笔记)
进入虚拟环境, 冷冻 把安装环境放到这个文档中 pip freeze >> requirements.txt 在另一台机器中 pip install -r requirements.txt ...
- 潭州课堂25班:Ph201805201 django 项目 第二十五课 文章多级评论前后台实现 (课堂笔记)
添加新闻评论功能 1.分析 业务处理流程: 判断前端传的新闻id是否为空,是否为整数.是否不存在 判断评论的内容是否为空 判断是否有父评论,父评论的id是否与新闻id匹配 判断用户是否登录 保存新闻评 ...
- 潭州课堂25班:Ph201805201 django 项目 第三课 码云注册,django项目 (课堂笔记)
d码云注册,登录, 创建项目: 生成秘钥 想看秘钥: 添加公钥 复制 ssh 连接 通过 git clone <ssh> 连接 在服务器上创建 python3 虚拟环境, 创建项目 p ...
- 潭州课堂25班:Ph201805201 django 项目 第三十五课 后台用户权限的添加 mixins 课堂笔记)
验证用户登录: 对一个视图函数进行登录权限验证,(登录后才可以访问,否则重定向到登录页面) #from django.contrib.auth.decorators import login_requ ...
- 潭州课堂25班:Ph201805201 django 项目 第三十四课 后台文章标签更新功能 ,创建功能实现(课堂笔记)
g更改标签:,前台要向后台传来 id, name, 对标签进行校验:标签不能为空,标签是否已经存在, 流程: def put(self, request, tag_id): ''' 更改标签 :par ...
- 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)
一.后台站点模版抽取 1.获取静态站点模版 可以使用git clone到本地 git clone https://github.com/almasaeed2010/AdminLTE.git 也可以在g ...
- 潭州课堂25班:Ph201805201 django 项目 第二十九课 docker实例,文件下载前后台实现 (课堂笔记)
docker 实例 :wq!保存退出 放入一个 html 文件 权限不够,加 sudo 查看本地仓库的 image 运行 docker -- name,后跟个运行名, -p 物理机端口映射到容器端口, ...
- 潭州课堂25班:Ph201805201 django 项目 第二十八课 新闻elasticsearch搜索前后功台能实现 (课堂笔记)
后端功能实现 文件,类,字段,命名不要改动, 在apps/news/search_indexes.py中创建如下类:(名称固定为search_indexes.py) # -*-# -*- coding ...
随机推荐
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...
- python一个用例,多组参数,多个结果
在某种情况下,需要用不同的参数组合测试同样的行为,你希望从test case的执行结果上知道在测试什么,而不是单单得到一个大的 test case:此时如果仅仅写一个test case并用内嵌循环来进 ...
- 优先选择nullptr而不是0和NULL
我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针 ...
- 滴水穿石-08IO
1.0 File a:构造方法 package d8; import java.io.File; public class FileGouZao { public static void main(S ...
- 步步为营-78-新闻展示(Ajax+Json+easyUI)
Json:JavaScript Object Notation 1.1 Json对象的接收处理 <!DOCTYPE html> <html xmlns="http://ww ...
- 有一个字典对象,d = {'a':1,'b':2},请用尽量简洁的代码将d转换成{1: 'a', 2: 'b'}
题目:有一个字典对象,d = {'a':1,'b':2},请用尽量简洁的代码将d转换成{1: 'a', 2: 'b'} 第一种方法: d = {'a': 1, 'b': 2}d = {value: k ...
- OpenCV-Python入门教程4-颜色空间转换
一.颜色空间转换 import cv2 import numpy as np img = cv2.imread('lena.jpg') # 转换成灰度图 img_gray = cv2.cvtColor ...
- XmlSerializer 实现序列化CDATA
[XmlIgnore] public string GuestRemarks { get; set; } [XmlElement("GuestRemarks")] public X ...
- 移动端:div在手机页面上随意拖动
<!doctype html> <html> <head> <title>弹窗</title> <meta charset=" ...
- [转] Webpack 打包优化之体积篇
谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝 ...