项目简介
本次项目是基于Python、Django和Vue.js构建的Web端视频平台,采用B/S(浏览器/服务器)架构模式。前端使用Vue.js开发,后端采用Python的Django框架进行开发。平台提供了视频内容的展示、用户互动、后台管理等功能,适合用作在线视频播放、管理及运营的全流程解决方案。
系统架构设计
平台分为前台和后台两大模块:
- 前台功能模块:包括首页、视频列表、视频详情、用户中心等,用户可以浏览、搜索视频,查看视频详情并进行互动。
- 后台功能模块:供管理员使用,包括视频管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理等,便于管理员进行系统运维及内容管理。
功能模块说明
-
前台模块:
- 首页:视频推荐、分类浏览。
- 视频列表:按照分类或标签展示视频,支持搜索。
- 视频详情:播放视频并查看评论、点赞等互动信息。
- 用户中心:用户登录后可以查看个人信息、收藏视频、评论历史等。
-
后台模块:
- 总览:平台运营的概览数据展示。
- 视频管理:视频的上传、编辑、删除等操作。
- 分类管理:对视频分类进行管理,方便内容组织。
- 标签管理:视频标签的创建和管理。
- 评论管理:对用户的评论内容进行审核和管理。
- 用户管理:管理员可以查看、编辑、删除用户信息。
- 运营管理:平台的广告、推广等内容。
- 日志管理:记录系统的操作日志。
- 系统信息:展示平台的系统配置信息。
部分功能截图
- 首页的推荐视频展示
- 视频详情页的播放和评论模块
- 后台视频管理界面的功能布局
核心代码实现
- 视频上传模块:实现了视频文件上传和存储,并对视频文件进行格式校验和大小限制。
from rest_framework.views import APIView
from rest_framework.response import Response
from django.core.files.storage import default_storage
from .models import Video
from .serializers import VideoSerializer
class VideoUploadView(APIView):
def post(self, request):
file = request.FILES.get('file')
if not file:
return Response({"error": "No file uploaded."}, status=400)
# 格式校验
allowed_extensions = ['mp4', 'mov', 'avi']
file_extension = file.name.split('.')[-1].lower()
if file_extension not in allowed_extensions:
return Response({"error": "Unsupported file format."}, status=400)
# 大小限制 (50MB example)
if file.size > 50 * 1024 * 1024:
return Response({"error": "File size exceeds limit."}, status=400)
# 保存视频文件
video = Video.objects.create(
file=file,
title=request.data.get('title'),
description=request.data.get('description'),
category_id=request.data.get('category')
)
return Response({"message": "Video uploaded successfully", "video_id": video.id}, status=201)
- 用户登录注册模块:使用Django的用户认证系统,实现用户的注册、登录、退出功能,支持邮箱验证。
from django.contrib.auth.models import User
from rest_framework.views import APIView
from rest_framework.response import Response
from django.core.mail import send_mail
class UserRegisterView(APIView):
def post(self, request):
username = request.data.get('username')
password = request.data.get('password')
email = request.data.get('email')
if User.objects.filter(username=username).exists():
return Response({"error": "Username already exists."}, status=400)
user = User.objects.create_user(username=username, password=password, email=email)
# 发送邮箱验证
send_mail(
'Account Verification',
'Please verify your account by clicking the link.',
'no-reply@yourdomain.com',
[email]
)
return Response({"message": "User registered successfully. Please check your email for verification."}, status=201)
- 评论和点赞功能:通过Ajax请求实现用户对视频的评论和点赞操作,页面无刷新更新数据
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Comment
class CommentView(APIView):
def post(self, request, video_id):
content = request.data.get('content')
user = request.user
comment = Comment.objects.create(
video_id=video_id,
user=user,
content=content
)
return Response({"message": "Comment posted", "comment_id": comment.id}, status=201)
def get(self, request, video_id):
comments = Comment.objects.filter(video_id=video_id).values('id', 'user__username', 'content', 'created_at')
return Response({"comments": list(comments)}, status=200)
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Video, Like
class LikeVideoView(APIView):
def post(self, request, video_id):
video = Video.objects.get(id=video_id)
user = request.user
# 检查用户是否已经点赞
if Like.objects.filter(video=video, user=user).exists():
return Response({"error": "You already liked this video"}, status=400)
like = Like.objects.create(video=video, user=user)
video.like_count += 1
video.save()
return Response({"message": "Video liked", "like_id": like.id}, status=201)
def delete(self, request, video_id):
video = Video.objects.get(id=video_id)
user = request.user
like = Like.objects.filter(video=video, user=user).first()
if like:
like.delete()
video.like_count -= 1
video.save()
return Response({"message": "Like removed"}, status=200)
else:
return Response({"error": "Like not found"}, status=404)
拓展项目案例
在此基础上,平台可以拓展出:
- 在线教育平台:通过课程视频、习题等功能进行在线教学。
- 短视频平台:增加短视频的快速浏览和推荐算法模块。
- 企业内部培训平台:企业可上传内部培训视频,员工登录后可学习。
部署运行
-
后端部署:
- 安装Python 3.8。
- 安装依赖:
pip install -r requirements.txt
。 - 配置MySQL数据库,并导入SQL文件。
- 启动Django服务:
python manage.py runserver
。
-
前端部署:
- 安装Node.js 16.14。
- 安装依赖:
npm install
。 - 启动前端项目:
npm run dev
。
源码获取
感兴趣联系我技术交流~