django 实现简单的插入视频

下面是详细讲解“django 实现简单的插入视频”的完整攻略:

1. 安装必要的库

在 Django 中插入视频,需要安装 Django 的文件上传插件 django-cleanup 和 视频相关库 ffmpeg

使用命令 pip install django-cleanup ffmpeg 来进行安装。

2. 定义视频上传模型

models.py 中定义视频上传的模型。

from django.db import models
from django_cleanup import cleanup

class Video(models.Model):
    title = models.CharField(max_length=255)
    file = models.FileField(upload_to='videos/')
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    # 调用 django_cleanup 删除原始上传文件
    cleanup.always_delete = True

定义了一个 Video 类,有标题、上传的文件、创建的时间属性,并在 Video 类上调用 cleanup.always_delete = True 以确保上传的文件在删除视频信息时也会被删除。

3. 管理系统中添加视频上传

admin.py 中,添加到 VideoAdmin 类中以便后台管理系统可以处理此模型。先上传时更容易操作。

from django.contrib import admin
from .models import Video

@admin.register(Video)
class VideoAdmin(admin.ModelAdmin):
    list_display = ['title', 'created_at']

4. 编写 url、view 和模板

在 Django 项目中编写视图和模板。在 URL 模式中定义 /upload/以及/videos/<str:title>/ 。然后再 views.py 中定义一个上传视频的视图函数 upload_video(request) 以及显示上传视频的视图函数 show_video(request, title), 并在模板中定义上传视频的 HTML 表单、显示上传的视频和列表的视图。

编写 URL 模式

from django.urls import path
from . import views

app_name = 'video'

urlpatterns = [
    path('upload/', views.upload_video, name='upload_video'),
    path('videos/<str:title>/', views.show_video, name='show_video'),
]

编写视图函数

from django.shortcuts import render, get_object_or_404
from django.views.decorators.http import require_POST
from .models import Video
from .forms import VideoForm

@require_POST
def upload_video(request):
    form = VideoForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return redirect('video:show_video', title=form.cleaned_data['title'])
    return render(request, 'video/upload.html', {'form': form})

def show_video(request, title):
    video = get_object_or_404(Video, title=title)
    return render(request, 'video/show.html', {'video': video, 'video_list': Video.objects.all()})

其中,在 upload_video() 视图函数中,使用了 require_POST 装饰器以确保只有 POST 请求才能上传视频。同时在 show_video() 视图函数中,使用 get_object_or_404() 来获取指定 Video 类型的视频模型。

编写模板

templates 文件夹中创建 video 文件夹,然后创建以下文件:upload.htmlshow.html 以及 base.html(基础模板)。

upload.html

{% extends 'video/base.html' %}

{% block content %}
    <h2>视频上传</h2>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="button">上传</button>
    </form>
{% endblock %}

标准的 HTML 表单,使用了 {% csrf_token %} 保护表单免受 CSRF 攻击,并使用 form.as_p 显示了定义的视频上传表单。

show.html

{% extends 'video/base.html' %}

{% block content %}
  <video width="640" height="480" controls>
      <source src="{{ video.file.url }}" type="video/mp4">
  </video>
{% endblock %}

{% block sidebar %}
  <h3>其他视频</h3>
  <ul>
      {% for v in video_list %}
      <li><a href="{{ v.get_absolute_url }}">{{ v.title }}</a></li>
      {% endfor %}
  </ul>
{% endblock %}

show.html 模板中,使用了 HTML5 的 video 标签来嵌入上传的视频。

5. 编写表单

forms.py 文件中创建一个新的文件 forms.py,并定义以下表单:

from django import forms
from .models import Video

class VideoForm(forms.ModelForm):
    class Meta:
        model = Video
        fields = ('title', 'file')
        widgets = {
            'title': forms.TextInput(attrs={'class': 'input'}),
            'file': forms.ClearableFileInput(attrs={'class': 'file'})
        }

在表单中引用了 Video 模型,并使用 TextInputClearableFileInput 样式表示表单。 定义好之后,在 views.py 中调用表单并将其传递到模板中,以显示上传视频的表单。

6. 运行 Django App

最后,运行 Django app 并访问 http://localhost:8000/video/upload/ 打开视频上传表单,上传视频并在视图中查看视频。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django 实现简单的插入视频 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django密码系统实现过程详解

    请看下文详细的讲解: Django密码系统实现过程详解 密码系统简介 Django是一个为快速开发高质量Web应用程序而设计的Python Web框架。其中一个重要的功能就是密码系统。Django内置的密码系统提供了方便、强大和安全的用户认证。该密码系统在用户提交密码时,将密码进行哈希运算和加密,然后存储在数据库中,以保证用户数据的安全性。 密码系统的实现步…

    Django 2023年5月16日
    00
  • Python[问题处理] django-admin.py startproject learning_log .

    django-admin.py startproject learning_log .最近在学习Django,在创建工程文件夹的过程中遇到了一些问题 django-admin.py startproject learning_log . 该语句用于使用django来创建一个名为“ learning_log ”的工程名。 但在cmd中运行这个语句,并不能达到效…

    Django 2023年4月13日
    00
  • django实现用户登陆功能详解

    下面详细讲解“Django实现用户登录功能”的完整攻略: 1. 创建Django项目 首先,我们需要先创建一个Django项目。在命令行中执行如下命令: django-admin startproject myproject 这将会创建一个名为 “myproject” 的Django项目。 2. 创建应用 接下来,我们需要创建一个应用,用来实现用户登录功能。…

    Django 2023年5月16日
    00
  • Django实现网页分页功能

    下面是Django实现网页分页功能的完整攻略,具体包含以下几个步骤: 步骤一:安装和配置django-pagination 库 django-pagination 库是Django实现网页分页的一个常用库,可以轻松实现分页功能,可以使用pip命令安装django-pagination,安装命令如下: pip install django-pagination…

    Django 2023年5月16日
    00
  • django 删除数据库表后重新同步的方法

      python manage.py sqlmigrate your_app_name 0001 把your_app_name换成自己的app名字即可看到框架自动生成的创建表sql语句,于是我就这样看到了sql语句。我直接在数据库中执行了该句sql命令手动创建了表,再启动应用,可以正常启动,问题解决。 D:\PycharmProjects\autotest&…

    Django 2023年4月9日
    00
  • Django与MVC

    Django是遵循MVC设计模式的一个框架:MVC(Model,View,Controller);模型,视图,控制器:如图: Django其实是一个MTV的模型:(Model,Template,VIew)模型,模板,视图  

    2023年4月9日
    00
  • Python – Django – 删除作者

    修改 author_list.html,添加删除按钮 <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>作者列表</title> </head> <body> <h1&…

    Django 2023年4月10日
    00
  • django配置(一)STATIC_ROOT

    说在前面:     最近学习的视频课程也逐渐到尾声了,来记录一些django中需要注意的配置修改 MEDIA_ROOT:     在说STATIC_ROOT之前,必须得提一下MEDIA_ROOT,在配置中,当你需要在你的项目中按照你心中的目录来存储文件时,MEDIA_ROOT是必不可少的。 # 文件存储配置 MEDIA_URL = ‘/media/’ MED…

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部