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 model content_type 使用

    一.关于content_type 使用 1.引入模块在models from django.db import models from django.contrib.contenttypes.models import ContentType #使用ContentType from django.contrib.contenttypes.fields imp…

    Django 2023年4月12日
    00
  • Python+Django实现简单HelloWord网页的示例代码

    接下来我将为您详细讲解“Python+Django实现简单HelloWord网页的示例代码”的完整攻略,包括两个示例说明。 示例1:简单的HelloWorld网页 Step 1. 安装Django 首先,要确保在您的电脑上已经安装了Python。然后,在终端中执行以下代码来安装Django: pip install django Step 2. 创建Djan…

    Django 2023年5月16日
    00
  • django model ValueQuerySet QuerySet 转换成JSON

    这里我有4个字段需要使用外键,那么在调取数据的时候就可以使用两个’_’进行调取,当然条件必须需要从前端传进来 models.py class HostInfo(models.Model): host_ip = models.GenericIPAddressField() usage = models.ForeignKey(‘ServiceLine’) sys…

    Django 2023年4月9日
    00
  • django的url的name参数的意义

    Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址改变了叫法,那眼泪可是哗哗的,有多少的拼凑的地址就得改动多少处!这时发现了url函数,这下可都好了,不管urlpatterns里的某个地址叫法怎么改变,Temp…

    Django 2023年4月10日
    00
  • 解决django报错:ValueError(“The view Hello.views.login didn’t return an HttpResponse object. It returned None instead.”)

    产生原因:定义的视图函数login,没有返回HttpResponse对象。它返回None。所有导致访问报错 解决:我在访问页面的时候把请求方式搞错了,本来是先获取页面,然后再提交数据。我这里变成直接提交数据了。 改成get,先获取界面在post提交数据: 附带一个启动django服务的脚本: import os def run_server(work_dir…

    Django 2023年4月12日
    00
  • Django 模型类(models.py)的定义详解

    我们一起来详细讲解下“Django 模型类(models.py)的定义详解”。 什么是Django模型类 Django 模型类是用来在数据库中创建表格的一个抽象,也是Django 框架中的一项非常重要的功能。模型类/数据模型是指定义方法中包含了存储数据的结构,将数据存储在数据库中,可以理解为Django的“数据表”。 通过Django模型类,可以通过定义属性…

    Django 2023年5月16日
    00
  • Django静态文件配置request对象方法ORM操作讲解

    下面是关于“Django静态文件配置request对象方法ORM操作讲解”的详细攻略讲解。 Django静态文件配置 在Django项目中,静态文件(例如CSS、JS、图片等)是必不可少的。Django提供了内置的静态文件管理器,为开发者提供了很多便捷的配置方法。 配置步骤 在settings.py文件中设置静态文件存放的目录。例如,存放在根目录下的stat…

    Django 2023年5月16日
    00
  • Django的安装、使用详解、自动化测试应用以及程序打包

    1、Django的安装 pip install Django 验证 Django 是否能被 Python 识别 >>> import django >>> print(django.get_version()) 2.2.6 2、创建Django项目脚手架(里面mysite 是Django容器) cd 到一个你想放置你代码的…

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