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日

相关文章

  • Python – Django – App 的概念

    App 方便我们在一个大的项目中,管理实现不同的业务功能 命令行: python manage.py startapp app名 使用 Pycharm 创建: 文件 -> 新建项目 然后要在 mysite 下的 settings.py 中进行相关的配置 两个写一个就好了 一个 app 会带有以下这些文件 apps.py 是和 app 配置相关的文件 v…

    Django 2023年4月10日
    00
  • Python Django教程之模板的使用

    让我针对“Python Django教程之模板的使用”的完整攻略进行详细说明。 什么是Django模板 Django模板是Django框架中一种方便且灵活的方法,用于渲染文本模板。模板与网站开发中的视图函数和数据访问相结合,能够在服务器端生成动态网页。 Django模板引擎使用的是Django模板语言(DTL),它是一个基于HTML的模板引擎,并且添加了一些…

    Django 2023年5月16日
    00
  • Django中的session用法详解

    Django中的session用法详解 什么是Session? Session是一种客户端与服务器端的会话机制。通过Session,服务器能获得客户端的信息,从而帮助客户端完成特定需要实现的操作。在Django中,Session变量是一个字典,保存跨请求的数据。 如何开启session功能? Django中,session功能是默认开启的。只需要在Setti…

    Django 2023年5月16日
    00
  • Django Rest framework 框架

    一、开发模式:     1. 普通开发方式(前后端放在一起写)   2. 前后端分离(前后台通过ajaxo交互)     后端(django rest framework写的) <—-ajaxo—>  前端(vue写的) <—– >  用户     好处:   二、后端开发     为前端提供url(API的开发或者接口…

    Django 2023年4月13日
    00
  • Django2.0 models中的on_delete参数

    一、外键、OneToOne字段等on_delete为必须参数  – 如下ForeignKey字段源码,to、on_delete为必须参数to:关联的表on_delete:当该表中的某条数据删除后,关联外键的操作related_name:反查参数,设置后可以在被关联表中通过该字段反查外键所在表,默认:set_表名to_field:默认主键,因为mysql只支持…

    Django 2023年4月10日
    00
  • django表单的Widgets使用详解

    下面是详细讲解“django表单的Widgets使用详解”的完整攻略,包含两条示例说明。 1. Widgets简介 Widgets是Django表单API中的重要组件,用于提供不同的表单控件(如文本框、单选框、复选框等),帮助我们构建出各种不同样式、不同类型的表单。 Widgets通常由Django库提供,但我们也可以编写自定义的Widgets来实现一些特定…

    Django 2023年5月15日
    00
  • Django:runserver实现远程访问

    Django自带的runserver实现远程访问 最近在Ubuntu服务器上创建了一个Django项目,想实现远程访问:新创建一个名为my_site的Django项目,目录结构如下: 项目结构 ../my_site/ ├── db.sqlite3 ├── manage.py └── my_site ├── __init__.py ├── __pycache_…

    Django 2023年4月13日
    00
  • Anaconda+django写出第一个web app(一)

    在安装好Anaconda和django之后,我们就可以开始创建自己的第一个Web app,那么首先创建一个空文件夹,之后创建的文件都在这个文件夹内。 启动命令行进入此文件夹内,可以先通过如下命令查看一下自己的python版本和django版本。  python –version  django-admin –version  我的python和djang…

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