下面是详细讲解“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.html
、show.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
模型,并使用 TextInput
和 ClearableFileInput
样式表示表单。 定义好之后,在 views.py
中调用表单并将其传递到模板中,以显示上传视频的表单。
6. 运行 Django App
最后,运行 Django app 并访问 http://localhost:8000/video/upload/
打开视频上传表单,上传视频并在视图中查看视频。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django 实现简单的插入视频 - Python技术站