(在线教育)项目总结
一、在线教育项目功能点(B2C)
1.后台管理系统
1.登录功能(SpringSecurity框架)
2.权限管理功能
(1)菜单管理
列表、添加、修改、删除
(2)角色管理
* 列表、添加、修改、删除、批量删除
* 为角色分配菜单
(2)用户管理
*列表、添加、修改、删除、批量删除
* 为用户分配角色
3.讲师管理功能
* 条件查询分页列表、添加、修改、删除
4.课程分类模块
(1)添加课程分类
* 读取Excel里面课程分类数据、添加到数据库当中
(2)课程分类列表
* 用树形结构显示课程分类列表
5.课程管理模块
(1)课程列表功能
(2)添加课程
* 课程发布流程:
第一步 填写课程基本信息
第二步 添加课程大纲(章节和小节)
第三步 课程信息确认
最终课程发布
*** 课程如何判断是否已经被发布了?
使用 status ,刚开始未发布的时候status 状态为Draft,发布完以后 status的状态变为Normal
*** 课程添加过程中,中途把课程添加停止,重新去添加新的课程,如何找到之前没有发布完成课程,继续进行发布?
到课程列表中根据课程状态查询查询出未发布的课程,点击课程右边超链接把课程继续发布完成
(3) 添加小节的时候上传视频(使用了阿里云的视频点播功能)
6、统计分析模块
(1) 生成统计数据
(2) 统计数据图表显示
2.前台系统
1.首页数据显示
(1)显示幻灯片功能
(2)显示热门课程
(3) 显示名师
2.注册功能
(1) 获取手机的验证码(整合了阿里云的短息服务)
3.登录功能
(1)普通登录
* SSO(单点登录)
第一种: session广播机制实现 实际上就是session的复制
第二种: 使用cookie+redis实现
1、在项目中任何一个模块进行登录,登录之后,把数据放到两个地方
(1)redis: 在key: 生成唯一随机值(ip、用户id等等) 在Value: 存放用户数据
(2) cookie: 把redis里面生成key值放到cookie里面
2、访问项目中其它模块,发送请求带着cookie进行发送,获取cookie值,拿着cookie做事情
把cookie获取值,到redis中进行查询,根据key进行查询,如果查询到数据就是登录
第三种: 使用token实现
1、在项目某个模块进行登录、登录之后,按照规则生成字符串,把登录之后用户包含到生成字符串里面,把字符串返回
(1) 可以把字符串通过cookie返回
(2) 把字符串通过地址栏返回
******* 使用JWT生成字符串
JWT生成字符串包含3个部分
(1) jwt头部信息
(2) 有效载荷 包含主体信息(用户信息)
(3) 签名哈希 防伪标志
*****登录流程******
登录调用登录接口返回token字符串,把返回token字符串放到cookie里面,创建前端拦截器进行拦截进行判断,如果cookie里面包含token字符串,把token字符串放到header里面,调用接口根据token获取用户信息,把用户信息放到cookie里面,进行显示。
(2) 微信扫码登录
OAuth2
是针特定问题解决方案
主要有两个问题:开放系统间授权,分布式访问
如何获取扫描人信息过程?
1.扫描之后,执行本地的callback方法,在callback获取两个值,在跳转时候传递过来
statc: 原样传递
code: 类似于手机验证码,随机唯一的值
2.拿着第一步获取到code值,请求微信提供固定的地址,获取到有两个值
(1)access_token: 访问凭证
(2) openid: 每个微信唯一标识
3.拿着上一步获取到两个值access_token和openid,再去请求一个微信提供固定地址,最终可以获取到微信扫描人信息。(微信昵称、微信头像)
4.名师列表功能
5.名师详情功能
6.课程列表功能
(1)条件查询分页列表功能
7.课程详情页
(1)课程信息显示(包含课程基本信息,分类,讲师,课程大纲)
(2)判断课程是否需要购买
8.课程视频在线播放
9.课程支付功能(微信支付)
(1)生成课程订单
(2)生成微信支付二维码
(3)微信最终支付
如果课程是收费课程,点击立即购买,生成课程订单
点击订单页面支付,生成微信支付二维码
使用微信扫描支付二维码实现支付
支付之后,每隔3秒查询支付状态(是否支付成功),如果没有支付成功等待,如果支付成功之后,更新订单状态(已经支付状态),向支付记录表添加支付成功记录。
二、在线教育项目技术点
使用了前后端分离开发
1.前端技术
(1)vue
基本语法
常见指令 v-bind v-model v-if v-for v-html
绑定事件 v-on-click @click
生命周期 created() 页面渲染之前 mounted() 页面渲染之后
ES6规范
(2)Element-ui
(3)node.js
是JavaScript运行环境,不需要浏览器直接运行js代码,模拟服务器效果
(4)npm
包管理工具,类似于Maven
npm命令: npm init npm install 依赖名称
(5) babel
转码器,把es6代码转换成es5代码
(6)前端模块化
通过一个页面或者一个js文件,调用另外一个js文件里面的方法
问题:es6的模块化代码无法在Node.js中执行,需要调用Babel编辑成es5后在执行
(7)后台系统使用 vue-admin-template
基于Vue+Element-ui
(8) 前台系统使用 Nuxt
基于Vue
服务端渲染技术
(9)Echarts
图表工具
2.后端技术
(1)项目采用微服务架构
(2)SpringBoot
SpringBoot 本质就是Spring,只是快速构建Spring 工程脚手架
细节:
启动类包扫描机制
设置扫描规则@ComponentScan("包路径")
SpringBoot配置文件
配置文件类型:properties和yml
配置文件加载顺序: bootstrap application application-dev
(3)SpringCloud
是很多框架的总称,使用这些框架实现微服务架构,基于SpringBoot实现
组成的框架有哪些
项目中使用阿里巴巴的Nacos,替代SpringCloud一些组件
使用Nacos作为注册中心
使用Nacos作为配置中心
使用Feign服务调用,一个微服务去调用另一个微服务,实现远程调用
熔断器
SpringCloud之前zuul网关,目前Gateway网关
(4)MyBatisPlus
MyBatisPlus就是对MyBatis做增强
自动填充
乐观锁
逻辑删除
代码生成器
(5)EasyExcel
阿里巴巴提供操作excel工具,代码简洁,效率很高
EasyExcel对poi进行封装,采用SAX方式解析
项目应用在添加课程分类,读取excel数据
(6)Spring Security
在项目整合框架实现权限管理功能
Spring Security框架组成:认证和授权
SpringSecurity登录认证过程
SpringSecurity代码执行过程
(7)Redis
首页数据通过Redis进行缓存
Redis数据类型
不太重要的或者是不经常改变的数据适合放在Redis作为缓存
(8)Nginx
反向代理服务器
请求转发、负载均衡、动静分离
(9)OAuth2+JWT
(10)HttpClient
发送请求返回响应的工具,不需要浏览器完成请求和响应的过程
应用场景:微信登录获取扫描人信息,微信支付查询支付状态
(11)Cookie
客户端技术
每次发送请求带着cookie值进行发送
cookie有默认会话级别,关闭浏览器cookie默认不存在了
但是可以设置cookie有效时长 setMaxAge
(12)微信登录
(13)微信支付
(14)阿里云OSS
文件存储服务器
添加讲师时候上传讲师头像
(15)阿里云视频点播
视频上传、删除、播放
整合阿里云视频播放器进行视频播放
* 使用视频播放凭证
(16)阿里云短信服务
注册时候,发送手机验证码
(17)Git
代码提交到远程Git仓库
(18)Docker+Jenkins
手动打包运行
idea打包
jenkins自动化部署过程
三、在线教育项目问题
1.多次路由跳转到同一个vue页面,页面中created方法只会执行一次
多次路由跳转到同一个vue页面,页面中created方法只会执行一次
解决方案:使用vue监听
2.前端问题-ES6模块化运行问题
Nodejs不能直接运行ES6模块化代码,需要使用Babel把ES6模块化代码转换ES5代码 执行
3.mp生成19位id值
mp生成id值是19位,JavaScript处理数字类型值时候,只会处理到16位
4.跨域问题
访问协议,ip地址,端口号,这三个如果有任何一个不一样,产生跨域
跨域解决:
* 在Controller添加注解
* 通过网关解决
5.413问题
上传视频时候,因为Nginx有上传文件大小限制,如果超过Nginx大小,出现413
413错误:请求体过大
在Nginx配置客户端大小
响应状态码:413 403 302
6.Maven加载问题
maven加载项目时候,默认不会加载src-java文件夹里面xml类型文件的
直接复制xml文件到target目录
通过配置实现
(在线教育)项目总结相关推荐
- 黑马在线教育项目---5、使用填充器创建数据库数据
黑马在线教育项目---5.使用填充器创建数据库数据 一.总结 一句话总结: ①创建填充器文件:#php artisan make:seeder ManagerTableSeeder ③执行填充器文件: ...
- 黑马在线教育项目---15-16、datatables插件
黑马在线教育项目---15-16.datatables插件 一.总结 一句话总结: datatables插件也比较好用,引入好插件的js和css后,核心代码也就是插件的初始化,如果要修改配置可以百度 ...
- 在线教育项目02_前端知识(es6、vue)
在线教育项目02_讲师管理模块 一.统一异常处理的另外两种情况 1.1 特殊异常(特定异常处理) 1.2 自定义异常处理 二.统一日志处理 1.Logback日志工具 三.ECMAScript 6.0 ...
- 在线教育项目_整体介绍
在线教育项目_整体介绍 一.项目的背景 二.商业模式 2.1 B2C(该项目的模式) 2.2 B2B2C(商家到商家到用户) 3.功能模块 3.1 系统后台 3.2 系统前台 4.项目使用到的技术 4 ...
- 在线教育项目04_讲师管理前端开发
在线教育项目04_讲师管理前端开发 一.登录功能(临时) 跨域问题 框架使用的过程 二.前端讲师开发 1.讲师列表 2.讲师列表添加分页 3.讲师列表条件查询实现 4.讲师列表删除功能 5.讲师列表删 ...
- SpringBoot在线教育项目(十一)
在线教育(十一) 一.服务端渲染技术NUXT-初始化NUXT 一.服务端渲染技术NUXT 二.NUXT环境初始化 三.幻灯片插件 二.首页静态效果整合和NUXT路由 一.页面布局 二.路由 三.封装a ...
- 在线教育项目技术笔记2
文章目录 一.对象存储OSS 1.阿里云OSS控制台使用 2.阿里云OSS开发准备 3.实现代码上传文件到阿里云OSS 二.nginx 1.nginx的启动安装 2.nginx配置项目请求转发 三.e ...
- Django——在线教育项目总结
项目简介 在线教育平台 软件依赖: WEB框架:Django(1.11.7).Django REST framework 前端框架:Vue(2.5.16) 数据库: MySql.redis 支付平台: ...
- Java在线教育项目 第一天项目介绍和工程搭建
第一章 项目介绍和工程搭建 学习目标 熟悉移动端应用系统的架构设计 熟悉大型软件系统设计中的各种图形结构 熟悉数据库分库分表设计技巧 熟悉Spring boot2.0+JavaConfig项目封装配置 ...
最新文章
- Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...
- 漫画 | 产品经理的八大罪状
- 食物链 poj 1182
- 通过 PhxPaxos 了解 Paxos 原理
- mysql增删改查脚本_脚本方式实现数据库增删改查
- [html] 如何构建“弱网络环境”友好的项目?
- PyTorch系列入门到精通——梯度消失与爆炸,损失函数
- app:利用HBuilder打包webpack项目
- 图像读取函数cv::imread()的几种使用方式
- 为什么像王者荣耀这样的游戏Server不愿意使用微服务?
- 微信小程序开发(十二)小程序画布组件canvas
- Python 植物大战僵尸代码实现(2):植物卡片选择和种植
- 读《如何阅读一本书》乱摘
- CODEVS 1069 关押罪犯
- 阿里云添加邮箱解析 实现邮件收发
- C语言#define宏中省略号的含义?
- JS setTimeout和setInterval的区别
- C++17标准STL库并行策略在GCC编译器中的替代实现方法
- HTML5+CSS大作业——明星个人主页(15页) 创作主页
- 特别关注 | 想给基因取个名儿?也要按照基本法!
热门文章
- 小程序开发.微信小程序.组件.视图容器
- Java SE8 流 最全总结
- C# 无法加载DLL (异常来自 HRESULT:0x8007007F)
- TC397 STM(System Timer)
- 【Linux操作系统系列】 Linux压缩打包
- 铁道部新客票系统设计(一)
- AI 入行那些事儿(10)人工智能的应用领域
- 综合案例:使用Scanner,Random,ArrayList完成一个不重复的点名程序
- 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4
- 游戏汉化教程1-汉化流程