项目介绍
一直想做一款视频点播管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以咨询评论。
在线体验
http://video.gitapp.cn/
源码地址
https://github.com/geeeeeeeek/python_video
功能介绍
系统分为后台和前台两部分。
后台的主要功能:
- 视频管理:管理系统可以录入、修改和查询视频的基本信息,如视频名称、简介、备注等。
- 类型管理:系统可以管理视频的类型信息,包括类型的名称等。
- 标签管理:管理标签录入、修改和查询标签的信息。
- 评论管理:管理和浏览整个网站的评论信息。
- 用户管理:管理和浏览网站的用户信息,可以新增、编辑和删除用户。
- 统计分析:系统可以根据视频的活动数据和会员参与度进行统计和分析,帮助管理员了解整个系统的状况。
- 消息管理:视频管理员可以在系统上发布消息,整个网站的用户都能收到。
- 系统信息:管理员可以查看系统的基本信息,包括系统名称、服务器信息、内存信息、cpu信息、软件信息等。
前台的主要功能:
- 注册登录:用户通过注册和登录后,才能使用网站。
- 门户浏览:用户进入首页后,可以浏览视频列表信息,包括最新、最热、推荐。
- 智能推荐:详情页右侧的热门推荐。
- 用户中心:包括用户基本资料修改、用户邮箱推送、消息。
- 我的收藏:包括我收藏的视频的信息。
- 模糊搜索:顶部搜索功能,支持模糊搜索视频信息。
- 视频评论:详情页下侧用户可以评论视频。
界面演示
开发环境
- 后端: Python 3.8 + Django 3.2
- 前端: Javascript + Vue
- 数据库:MySQL 5.7
- 开发平台:Pycharm + vscode
- 运行环境:Windows 10/11
关键技术
- 前端技术栈 ES6、vue、vuex、vue-router、vue-cli、axios、antd
- 后端技术栈 Python、Django、pip
后端技术
django框架
Django是一款基于Python开发的全栈式一体化Web应用框架。2003年问世之初,它只是美国一家报社的内部工具,2005年7月使用BSD许可证完成了开源。Django采用MTV设计模式,即Model(模型)+ Template(模板)+ View(视图)。它遵循MVC设计,并且内置了对象关系映射(ORM)层,使得开发者无需关心底层的数据存取细节,可以更专注于业务逻辑的开发。
Django的目的是削减代码量,简单且迅速地搭建以数据库为主体的复杂Web站点。它是全栈式框架,因此安装起来很简单,而且使用者众多。这使得Django除具有完备的官方文档之外,还有大量的关联文档、丰富的第三方库可供使用。与其他框架相比,Django用起来要轻松得多。
优点:
- 提供了定义序列化器Serializer的方法。可以快速根据Django ORM或者其他库自动序列化或反序列化。
- 提供了丰富的类视图MIXIN扩展类。可以简化视图的编写。
- 具有丰富的定制层级。包括函数视图、类视图,还可以将视图与自动生成API结合,满足各种需求。
- 支持多种身份认证和权限认证方式。
- 内置了限流系统。
前端技术
- npm:node.js的包管理工具,用于统一管理我们前端项目中需要用到的包、插件、工具、命令等,便于开发和维护。
- ES6:Javascript的新版本,ECMAScript6的简称。利用ES6我们可以简化我们的JS代码,同时利用其提供的强大功能来快速实现JS逻辑。
- vue-cli:Vue的脚手架工具,用于自动生成Vue项目的目录及文件。
- vue-router: Vue提供的前端路由工具,利用其我们实现页面的路由控制,局部刷新及按需加载,构建单页应用,实现前后端分离。
- vuex:Vue提供的状态管理工具,用于统一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象。
- Ant-design:基于MVVM框架Vue开源出来的一套前端ui组件。
运行步骤
后端运行步骤
(1) 安装mysql数据库,启动服务
(2) 打开cmd命令行,进入mysql,并新建数据库
mysql -u root -p
CREATE DATABASE IF NOT EXISTS python_video DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
(3) 恢复sql数据
use xxx
source xxxx.sql
(4) 修改settings.py中的配置信息
(5) 安装python 3.8
(6) 安装依赖包
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
(7) 运行命令
python manage.py runserver
前端运行步骤
(1) 安装node 16
(2) cmd进入web目录下,安装依赖,执行:
npm install
(3) 运行项目
npm run dev
代码结构
后端结构
server
├── myapp // 主应用
│ └── auth // 认证管理
│ └── middlewares // 中间件
│ └── permission // 权限
│ └── views // 视图与接口(主要业务代码)
│ └── models.py // 状态码
│ └── serializers.py // 状态码
│ └── urls.py // 状态码
│ └── utils.py // 状态码
├── entity // 实体类
├── interceptor // 拦截器
├── mapper // 数据库映射
├── server // 配置目录
├── upload // 静态资源目录
├── requiements.txt // 依赖项
前端结构
├── build // 构建相关
├── public // 公共文件
│ ├── favicon.ico // favicon图标
│ └── index.html // html模板
├── src // 源代码
│ ├── api // 所有请求
│ ├── assets // 主题 字体等静态资源
│ ├── router // 路由
│ ├── store // 全局 store管理
│ ├── utils // 全局公用方法
│ ├── views // view界面
│ ├── App.vue // 入口页面
│ ├── main.js // 入口 加载组件 初始化等
│ └── settings.js // 系统配置
├── .eslintignore // 忽略语法检查
├── .eslintrc.js // eslint 配置项
├── .gitignore // git 忽略项
├── babel.config.js // babel.config.js
├── package.json // package.json
└── vite.config.js // vue配置
数据库设计
需求分析
在视频管理系统中,需要存储和管理视频信息、评论信息、分类信息、标签信息、用户信息、通知信息、日志信息。
实体设计如下:
- 视频(thing)
- 分类(classification)
- 标签(tag)
- 用户(user)
- 评价(comment)
- 日志(log)
- 通知(notice)
关系如下:
- 一个视频有一个分类
- 一个分类可以对应多个视频
- 一个视频有多个标签
- 一个标签可以对应多个视频
数据表设计如下:
// 视频表
Table thing {
thing_id int [pk]
classification_id int [ref: > C.classification_id]
tag_id int [ref: <> tag.tag_id]
title varchar
cover varchar
raw varchar // 视频文件路径
status int // 0上架 1下架
score varchar
description text
create_time datetime
pv int
wish_count int
recommend_count int
wish int [ref: <> user.user_id]
collect int [ref: <> user.user_id]
}
// 分类
Table classification as C {
classification_id int [pk]
pid int
title varchar
create_time datetime
}
// 标签
Table tag {
tag_id int [pk]
title varchar
create_time datetime
}
// 评论
Table comment {
comment_id int [pk]
content varchar
user_id int [ref: > user.user_id]
thing_id int [ref: > thing.thing_id]
comment_time datetime
like_count int
}
// 用户表
Table user {
user_id int [pk]
role varchar // 1管理员 2普通用户 3演示帐号
status int // 0正常 1封号
username varchar
password varchar
nickname varchar
avatar varchar
description varchar
wish int [ref: <> thing.thing_id]
email varchar
mobile varchar
score int // 积分
push_email varchar // 推送邮箱
push_switch int // 推送开关
token varchar
admin_token va