django 实现简单的插入视频

yizhihongxing

下面是详细讲解“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网站时发现,访问某些页面时响应超慢,需要等待很长时间才能加载完成。为了解决这个问题,我展开了一系列的排查和优化,最终成功解决了问题。 解决过程 排查问题 遇到响应超慢的问题,首先要知道具体是哪个页面导致的问题。可以通过Chrome开发者工具进行排查,具体操作如下: 打…

    Django 2023年5月16日
    00
  • django的登录注册系统的示例代码

    首先,需要先说明一下Django的登录注册系统是如何实现的。 Django使用的是MVC(Model-View-Controller)框架,其中登录注册系统主要是使用Django的auth模块实现的。 接下来,我将为你详细讲解Django的登录注册系统的示例代码的完整攻略。 示例1:Django用户注册系统的示例代码 步骤1:创建新的Django项目 可以使…

    Django 2023年5月15日
    00
  • Django项目部署流程与Nginx安装配置

    安装Nginx 在Ubuntu系统中,可以通过以下命令安装Nginx: sudo apt-get update sudo apt-get install nginx 配置静态文件访问 在Django项目的settings.py文件中,加入以下代码: STATIC_URL = '/static/' STATIC_ROOT = os.path…

    Django 2023年3月13日
    00
  • Django虚拟环境拷贝到另一台电脑,不能直接使用的问题

    最近折腾一个django的项目,想快速部署到服务器看看效果。virtualenv号称python三大神器之一,因此我打算把pycharm自动创建的虚拟环境直接拷贝到服务器运行代码。谁知出现了问题。   在pycharm上创建的虚拟环境是3.6.4 服务器环境上python3版本为3.6.9   按道理说,把本机的虚拟环境从本机拷贝到服务器,服务器就能直接运行…

    Django 2023年4月13日
    00
  • django框架学习:十九.admin后台表名称和字段显示中文

    如下图所示,生成数据库表格后,admin后台生成表名称会自动多一s,如果想让表名称,以及表格里的字段名中文显示,django里就需要添加verbose_name 和verbose_name_plural属性。        verbose_name 用法 如下图所示,如果想让表的字段名称显示为中文,需要在models.py文件添加verbose_name  …

    2023年4月10日
    00
  • django 统计表

    1. 复杂版 统计,通过跨表查询和timedate模块过滤找到 1 from django.db.models import Count 2 3 class TongJiView(View): 4 def today(self): 5 import datetime 6 today=datetime.datetime.now().date() 7 custo…

    Django 2023年4月12日
    00
  • DRF(Django REST Framework)框架

    目录 一.DRF中的Request 二.前戏: 关于面向对象的继承 三.初级版本 1. settings.py文件 — 注册app 2. models.py文件 — 创建表 3. admin.py文件 4. 根目录下urls.py — 路由匹配 5. bms/views.py — 视图函数 6. bms/modelserializers.py — …

    Django 2023年4月10日
    00
  • django基础之day08,利用bulk_create 批量插入成千上万条数据

    bulk_create批量插入数据 models.py文件 class Book(models.Model): title=models.CharField(max_length=32) urls.py文件 from app01 import views urlpatterns = [ url(r’^admin/’, admin.site.urls), #首…

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