免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Django blog項(xiàng)目《十四》:視頻播放模塊

在線(xiàn)視頻采用,視頻上傳到百度云VOD進(jìn)行存儲(chǔ),然后在html中調(diào)用接口進(jìn)行播放,具體見(jiàn)幫助文檔

在線(xiàn)視頻播放處理和在線(xiàn)文檔下載處理差不多,就多一個(gè)調(diào)用百度云VOD的處理接口。

一、分析

1. 數(shù)據(jù)庫(kù)設(shè)計(jì)

  1. Teacher

    字段名字段類(lèi)型關(guān)聯(lián)表關(guān)聯(lián)類(lèi)型關(guān)聯(lián)操作
    idint
    namechar
    positionchar
    brieftext
    sayingchar
    avatarurl
    create_timedatatime
    update_timedatatime
    is_deleteboolean
  2. CourseCategory

    字段名字段類(lèi)型關(guān)聯(lián)表關(guān)聯(lián)類(lèi)型關(guān)聯(lián)操作
    idint
    namechar
    create_timedatatime
    update_timedatatime
    is_deleteboolean
  3. Course

    字段名字段類(lèi)型關(guān)聯(lián)表關(guān)聯(lián)類(lèi)型關(guān)聯(lián)操作
    idint
    namechar
    timechar
    brieftext
    outlinechar
    clicksinteger
    cover_urlurl
    video_urlurl
    teacherForeignKeyTeacherManyToOneSET_NULL
    categoryForeignKeyCourseCategoryManyToOneSET_NULL
    create_timedatatime
    update_timedatatime
    is_deleteboolean

2. 視頻列表顯示

  1. 業(yè)務(wù)流程
    1. 從數(shù)據(jù)庫(kù)中獲取視頻信息返回給前端
    2. 填充html
    3. 待寫(xiě):根據(jù)類(lèi)型分類(lèi)(功能和文章分類(lèi)實(shí)現(xiàn)一樣)
  2. 請(qǐng)求方式:GET
  3. 請(qǐng)求地址:/course/index/
  4. 請(qǐng)求參數(shù):無(wú)

3. 視頻播放

  1. 業(yè)務(wù)流程

    1. 接收前端傳來(lái)的視頻id
    2. 在數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)
    3. 跳轉(zhuǎn)到視頻播放頁(yè)面
    4. 調(diào)用百度云VOD播放接口
  2. 請(qǐng)求方式:GET

  3. 請(qǐng)求地址:/course/<int:course_id>/

  4. 請(qǐng)求參數(shù):

    參數(shù)類(lèi)型前端是否必須傳描述
    course_idint路徑參數(shù)

二、視頻播放功能

1. 數(shù)據(jù)庫(kù)

course/models.py

from django.db import modelsfrom utils.models.models import BaseModelclass Teacher(BaseModel):    """    create teacher model    field:        姓名  name        CharField        職銜  position    CharField        簡(jiǎn)介  brief       TextField        名言  saying      CharField        頭像  avatar      URLField    """    name = models.CharField(max_length=20, verbose_name="姓名", help_text="姓名")    position = models.CharField(max_length=30, verbose_name="職位", help_text="職位")    brief = models.TextField(verbose_name="簡(jiǎn)介", help_text="簡(jiǎn)介")    saying = models.CharField(max_length=150, verbose_name="個(gè)性簽名", help_text="個(gè)性簽名")    avatar = models.URLField(default="", verbose_name="姓名", help_text="姓名")    class Meta:        db_table = "tb_teacher"        verbose_name = "講師"        verbose_name_plural = verbose_name    def __str__(self):        return "姓名:{}".format(self.name)class CourseCategory(BaseModel):    """    create course category model    field:        課程名     name        CharField    """    name = models.CharField(max_length=30, verbose_name="課程分類(lèi)名", help_text="課程分類(lèi)名")    class Meta:        db_table = "tb_coursecategory"        verbose_name = "課程分類(lèi)"        verbose_name_plural = verbose_name    def __str__(self):        return "課程分類(lèi):{}".format(self.name)class Course(BaseModel):    """    create course model    field:        名字      name            CharField        封面url   cover_url       URLField        鏈接url   video_url       URLField        時(shí)長(zhǎng)      time            FloatField        簡(jiǎn)介      brief           TextField        課程大綱   outline         TextField        點(diǎn)擊量     clicks          IntegerField        講師      teacher         ManyToOne        類(lèi)型      category        ManyToOne    """    name = models.CharField(max_length=150, verbose_name="課程名", help_text="課程名")    time = models.FloatField(default=0.0, verbose_name="時(shí)長(zhǎng)", help_text="時(shí)長(zhǎng)")    brief = models.TextField(verbose_name="簡(jiǎn)介", help_text="簡(jiǎn)介")    outline = models.TextField(verbose_name="大綱", help_text="大綱")    clicks = models.IntegerField(default=0, verbose_name="觀看量", help_text="觀看量")    cover_url = models.URLField(null=True, blank=True, verbose_name="封面url", help_text="封面url")    video_url = models.URLField(null=True, blank=True, verbose_name="視頻url", help_text="視頻url")    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 = "課程"        verbose_name_plural = verbose_name    def __str__(self):        return "課程:{}".format(self.name)

2. 視頻列表顯示

1. urls.py配置

course/urls.py

from django.urls import pathfrom course import viewsapp_name = "course"urlpatterns = [    path("index/", views.CourseIndexView.as_view(), name="index"),]
2. views.py邏輯處理

course/views.py

from django.views import Viewfrom django.shortcuts import renderfrom course import modelsclass CourseIndexView(View):    """    course index view    """    def get(self, request):        # 獲取課程列表中需要的數(shù)據(jù):課程標(biāo)題,講師姓名,講師職位        course_list = models.Course.objects.select_related("teacher").only("name", "teacher__name",                                                                      "teacher__position").filter(is_delete=False)        return render(request, 'course/course.html', locals())
3. html填充

course/course.html

<main id="course-container">    <div class="w1200">        <ul class="course-list">            {% for course in course_list %}            <li class="course-item">                <a href="{% url 'course:course_detail' course.id %}">                    <img class="course-img" src="{{ course.cover_url }}"                         alt="{{ course.category.name }}">                    <div class="course-content">                        <p class="course-info">{{ course.name }}</p>                        <p class="course-author">{{ course.teacher.name }}({{ course.teacher.position }})</p>                        <p class="course-price free">免費(fèi)</p>  {# 后面寫(xiě)成動(dòng)態(tài)的 #}                    </div>                </a>            </li>            {% endfor %}        </ul>    </div></main>

3. 視頻播放

1. urls.py配置

course/urls.py

from django.urls import pathfrom course import viewsapp_name = "course"urlpatterns = [    path("<int:course_id>/", views.CourseDetailView.as_view(), name="course_detail"),]
2. views.py邏輯處理

course/views.py

from django.views import Viewfrom django.http import Http404from django.shortcuts import renderfrom course import modelsclass CourseDetailView(View):    """    course detail view    """    # 1. 從數(shù)據(jù)庫(kù)中獲取到需要的課程播放信息:課程名字,教師名字,教師頭像,教師簡(jiǎn)介,教師名言,課程簡(jiǎn)介,課程大綱,視頻url,視頻封面url    def get(self, request, course_id):        course_detail = models.Course.objects.select_related("teacher").only("name", "brief", "outline", "video_url",                                                                      "cover_url","teacher__name","teacher__brief",                                                                      "teacher__avatar","teacher__saying").filter(            is_delete=False, id=course_id).first()        if course_detail:            return render(request,'course/course_detail.html', locals())        else:            raise Http404("課程不存在")
3. html填充

course/course_detail.html

<div class="course-video" id="course-video">  {# 百度VOD視頻接口 #}    <span class="course-data" style="display: none;" data-video-url="{{ course_detail.video_url }}"          data-cover-url="{{ course_detail.cover_url }}">    </span></div><script src="https://cdn.bdstatic.com/jwplayer/latest/cyberplayer.js"></script>  {# 百度VOD視頻功能 #}<script src="{% static 'js/course/BDVideoPlayer.js' %}"></script>  {# 接口調(diào)用 #}
4. js邏輯處理

js/course/BDVideoPlayer.js

$(function () {    let $courseData = $(".course-data");  //百度云VOD API接口標(biāo)簽    let $videoUrl = $courseData.data('video-url');   //視頻url    let $coverUrl = $courseData.data('cover-url');   //封面url    let player = cyberplayer('course-video').setup({        width: '100%',// 寬度百分比(父元素寬度要有),可以是固定寬度        height: 650, // 高度        file: $videoUrl,  // 視頻url        image: $coverUrl,   // 封面url        autostart: false,   //是否自動(dòng)播放        stretching: "uniform", //拉伸設(shè)置        repeat: false,  // 是否重復(fù)播放        volume: 100,    //音量大?。?-100)        controls: true, //控制是否顯示        ak: '自己的百度云VOD安全認(rèn)真的AK',    })});
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Django開(kāi)發(fā)在線(xiàn)教育平臺(tái)
python測(cè)試開(kāi)發(fā)django-38.ManyToMany查詢(xún)
xadmin與django
django---admin添加應(yīng)用
django
Django模型層Meta內(nèi)部類(lèi)詳解
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服