基于Python+Django+vue的web端视频平台

项目简介

本次项目是基于Python、Django和Vue.js构建的Web端视频平台,采用B/S(浏览器/服务器)架构模式。前端使用Vue.js开发,后端采用Python的Django框架进行开发。平台提供了视频内容的展示、用户互动、后台管理等功能,适合用作在线视频播放、管理及运营的全流程解决方案。

系统架构设计

平台分为前台和后台两大模块:

  • 前台功能模块:包括首页、视频列表、视频详情、用户中心等,用户可以浏览、搜索视频,查看视频详情并进行互动。
  • 后台功能模块:供管理员使用,包括视频管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理等,便于管理员进行系统运维及内容管理。

功能模块说明

  • 前台模块

    1. 首页:视频推荐、分类浏览。
    2. 视频列表:按照分类或标签展示视频,支持搜索。
    3. 视频详情:播放视频并查看评论、点赞等互动信息。
    4. 用户中心:用户登录后可以查看个人信息、收藏视频、评论历史等。
  • 后台模块

    1. 总览:平台运营的概览数据展示。
    2. 视频管理:视频的上传、编辑、删除等操作。
    3. 分类管理:对视频分类进行管理,方便内容组织。
    4. 标签管理:视频标签的创建和管理。
    5. 评论管理:对用户的评论内容进行审核和管理。
    6. 用户管理:管理员可以查看、编辑、删除用户信息。
    7. 运营管理:平台的广告、推广等内容。
    8. 日志管理:记录系统的操作日志。
    9. 系统信息:展示平台的系统配置信息。

部分功能截图

  • 首页的推荐视频展示
  • 视频详情页的播放和评论模块
  • 后台视频管理界面的功能布局

核心代码实现

  • 视频上传模块:实现了视频文件上传和存储,并对视频文件进行格式校验和大小限制。
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)

拓展项目案例

在此基础上,平台可以拓展出:

  • 在线教育平台:通过课程视频、习题等功能进行在线教学。
  • 短视频平台:增加短视频的快速浏览和推荐算法模块。
  • 企业内部培训平台:企业可上传内部培训视频,员工登录后可学习。

部署运行

  1. 后端部署

    • 安装Python 3.8。
    • 安装依赖:pip install -r requirements.txt
    • 配置MySQL数据库,并导入SQL文件。
    • 启动Django服务:python manage.py runserver
  2. 前端部署

    • 安装Node.js 16.14。
    • 安装依赖:npm install
    • 启动前端项目:npm run dev

源码获取

感兴趣联系我技术交流~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值