应用的前端技术
- Ajax (重要) — jQuery方式接口请求
- Layui 框架使用
- HTML + CSS + JS
项目说明和演示
- 线上 DEMO 项目地址:http://www.liulongbin.top:8086/
- 项目的 API 接口地址: https://www.showdoc.cc/escook?page_id=3707158761215217
项目请求根路径:http://www.liulongbin.top:3007
文件获取:
git — ssh
** : git@gitee.com:wang_yu5201314/big_events.git**(文章列表编辑未完成)
百度云:
**链接:https://pan.baidu.com/s/1VLGj9d-bBMOcPmL_S6nyIA 提取码:d1lj
准备工作
- 创建一个文件夹,(项目根目录),项目的所有代码都放到这个文件夹
- 把资料中的基本代码里面的文件拷贝到项目目录中
- 使用Git来管理项目(以后做完一个功能,提交一次;)
- git init
- git add .
- git commit -m ‘提交了初始的代码’
模拟服务器的环境
-
开发完成,最终肯定要把项目发布到真正的服务器上。
-
所以,本地开发的时候,最好也使用服务器环境(模拟)。
-
好处是,项目发布到真正的服务器上的时候,不会出现这样或那样的问题。因为本地开发的时候,使用的也是服务器环境。
如何使用服务器环境
- 使用vscode插件 – live server
- 编辑器右键菜单中会出现 “Open With Liver Server”,点击它,可以预览页面
- 特点:页面改变之后,浏览器会自动刷新
- 使用vscode插件 – preview on web server
- 右键菜单出现 “vscode-preview-server:Launch on browser”,点击它可以预览
使用上述两个插件,硬性要求:
vscode 编辑器侧边栏(文件区域)不能有其他文件夹,只能有你的项目文件夹。
反例1:
反例2:
登录和注册
新建分支
每个功能,最好创建一个新的分支
# 创建并切换分支
git checkout -b login# 也可以先创建分支,然后在切换分支
git branch login
git checkout login
新建login.html
在项目根目录里面创建了login.html
创建 big-event/assets/css/login.css
创建 big-event/assets/js/login.js
加载所需的文件
<!-- login.html head区 --><!-- 加载第三方的 layui.css --><link rel="stylesheet" href="/assets/lib/layui/css/layui.css"><!-- 加载自己的css --><link rel="stylesheet" href="/assets/css/login.css"><!-- 加载jquery.js --><script src="/assets/lib/jquery.js"></script><!-- 加载layui.all.js --><script src="/assets/lib/layui/layui.all.js"></script><!-- 加载自己的js --><script src="/assets/js/login.js"></script>
原则是,先加载第三方的css和js。后加载自己的css和js
路径中的 / 表示项目根目录 (big-event),必须使用服务器环境,才能使用 /
logo区布局
<!-- logo盒子 --><div class="logo"><img src="/assets/images/logo.png" /></div>
* {margin: 0;padding: 0;
}html, body {width: 100%;height: 100%;
}body {background: url("/assets/images/login_bg.jpg") no-repeat;background-size: cover;overflow: hidden;
}.logo {padding: 20px 0 0 40px;
}
表单区布局
<!-- 登录的盒子 --><div class="login"><!-- 盒子的标题 --><div class="title"><img src="/assets/images/login_title.png" /></div><!-- 表单区 --><form class="layui-form"><!-- 第一行:账号 --><div class="layui-form-item"><i class="layui-icon layui-icon-username"></i><input type="text" name="title" required lay-verify="required" placeholder="请输入账号" autocomplete="off"class="layui-input"></div><!-- 第二行:密码 --><div class="layui-form-item"><i class="layui-icon layui-icon-password"></i><input type="text" name="title" required lay-verify="required" placeholder="请输入密码" autocomplete="off"class="layui-input"></div><!-- 第三行:按钮 --><div class="layui-form-item"><button class="layui-btn layui-btn-fluid layui-bg-blue" lay-submit lay-filter="formDemo">登录</button></div><!-- 第四行:去注册 --><div class="layui-form-item"><a href="javascript:">去注册</a></div></form></div><!-- 注册的盒子 --><div class="register"><!-- 盒子的标题 --><div class="title"><img src="/assets/images/login_title.png" /></div><!-- 表单区 --><form class="layui-form"><!-- 第一行:账号 --><div class="layui-form-item"><i class="layui-icon layui-icon-username"></i><input type="text" name="title" required lay-verify="required" placeholder="请输入账号" autocomplete="off"class="layui-input"></div><!-- 第二行:密码 --><div class="layui-form-item"><i class="layui-icon layui-icon-password"></i><input type="text" name="title" required lay-verify="required" placeholder="请输入密码" autocomplete="off"class="layui-input"></div><!-- 第三行:确认密码 --><div class="layui-form-item"><i class="layui-icon layui-icon-password"></i><input type="text" name="title" required lay-verify="required" placeholder="请确认密码" autocomplete="off"class="layui-input"></div><!-- 第四行:按钮 --><div class="layui-form-item"><button class="layui-btn layui-btn-fluid layui-bg-blue" lay-submit lay-filter="formDemo">注册</button></div><!-- 第五行:去登录 --><div class="layui-form-item"><a href="javascript:">去登录</a></div></form></div>
/*登录的盒子和注册的盒子*/
.login, .register {width: 400px;height: 310px;background-color: #fff;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);
}/* 先隐藏注册的盒子 */
.register {display: none;
}.title {margin: 18px auto;text-align: center;
}/*表单区*/
.layui-form {padding: 0 30px;
}.layui-form a {display: flex;justify-content: flex-end; /*让元素在盒子的右侧显示*/
}/*字体图标调整*/
.layui-form-item {position: relative;
}.layui-form-item .layui-icon {position: absolute;top: 11px;left: 8px;
}input.layui-input {padding-left: 28px;
}
$(function () {// 入口函数// -------------------------- 切换登录和注册的盒子 -------------// 点击去注册$('.login a').click(function () {$('.login').hide().next().show();});// 点击去登录$('.register a').click(function () {$('.register').hide().prev().show();});});
Git提交了一次
实现注册功能
// --------------------- 完成注册功能 ---------------------$('.register form').on('submit', function (e) {e.preventDefault();// 获取表单中的数据let data = $(this).serialize(); // serialize是根据表单各项的name属性获取值的,所以要检查表单各项的name属性// 发送ajax请求到接口,完成注册$.ajax({type: 'POST',url: 'http://www.liulongbin.top:3007/api/reguser',data: data,success: function (res) {alert(res.message);if (res.status === 0) {// 注册成功,让登陆的盒子显示$('.register').hide().prev().show();}}});});
注册功能可以实现,但是缺少表单验证。
Git,提交。完成了注册功能。
git commit -a -m '完成了注册功能'
layui表单验证模块
layui模块的使用步骤:
- 加载模块(得到一个JS对象)
let form = layui.form;
- 使用模块提供的方法
使用表单模块中的表单验证方法
// 加载模块
let form = layui.form;
// 调用方法,定义验证规则
form.verify({// 对象里面的每个键值对,就是一个自定义的验证规则// 写法一,使用数组// 验证规则: [/正则表达式/, '验证失败时的提示']// 写法二:使用函数// 验证规则: function (valeu) {// valeu 表示输入框输入的值// return '失败后的提示'// }
});
我们的项目 login.js
// ----------------------------- 表单验证 --------------
// 1. 加载表单(form)模块
let form = layui.form;
// 2. 使用form.verify()方法实现表单验证
form.verify({// 第一个验证规则,验证密码长度必须是6~12位// key: value// 验证规则: array|function// pwd: ['正则', '验证不通过时的提示'],// pwd: [/^\S{6,12}$/, '密码长度必须是6~12位,并且不能有空格']pwd: function (value) {// value表示使用验证规则的输入框的值if (!/^\S{6,12}$/.test(value)) {return '密码长度必须是6~12位,并且不能有空格';}},// 验证两次密码repwd: function (value) {// value 表示确认密码let pwd = $('input[name="password"]').val().trim(); // 获取密码if (value !== pwd) {return '两次密码不一致';}}
});
login.html页面中,表单元素使用验证规则:
<!-- 第二行:密码 -->
<div class="layui-form-item"><i class="layui-icon layui-icon-password"></i><input type="text" name="password" required lay-verify="required|pwd" placeholder="请输入密码" autocomplete="off"class="layui-input">
</div>
<!-- 第三行:确认密码 -->
<div class="layui-form-item"><i class="layui-icon layui-icon-password"></i><input type="text" required lay-verify="required|pwd|repwd" placeholder="请确认密码" autocomplete="off"class="layui-input">
</div>
千万注意:想要实现表单验证,登录按钮必须有
lay-submit
属性
Git 提交。git commit -a -m ‘完成了注册时的表单验证’
使用layer模块实现弹出层效果
使用模块:
- 加载模块
let layer = layui.layer;
- 调用方法
layer.msg(提示信息)
具体,在login.js中,先加载模块,然后注册的失败,使用弹出层。
let layer = layui.layer; // 加载弹出层模块
// --------------------- 完成注册功能 ---------------------
$('.register form').on('submit', function (e) {e.preventDefault();// 获取表单中的数据let data = $(this).serialize(); // serialize是根据表单各项的name属性获取值的,所以要检查表单各项的name属性// 发送ajax请求到接口,完成注册$.ajax({type: 'POST',url: 'http://www.liulongbin.top:3007/api/reguser',data: data,success: function (res) {// alert(res.message);layer.msg(res.message);if (res.status === 0) {// 注册成功,让登陆的盒子显示$('.register').hide().prev().show();}}});
});
Git提交。
git commit -a -m '使用layer模块优化注册的弹出层'
实现登录功能
自行修改表单项的name属性值。
// -------------------------- 完成登录功能 ---------------------------
$('.login form').on('submit', function (e) {e.preventDefault();// 获取账号和密码// 提交给接口,完成登录。登录成功,跳转到 index.html (index.html是项目的首页面)$.ajax({type: 'POST',url: 'http://www.liulongbin.top:3007/api/login',data: $(this).serialize(), // 检查表单各项的name属性值success: function (res) {layer.msg(res.message);if (res.status === 0) {// 登录成功,跳转到index.htmllocation.href = '/index.html';}}});
})
Git提交,
git commit -a -m '完成了登录代码'
JWT验证机制原理
JWT(json web token),是一种前后端分离项目的常用身份认证机制。
原理图:
项目中,登录成功之后,把token保存到本地存储中:
// -------------------------- 完成登录功能 ---------------------------
$('.login form').on('submit', function (e) {e.preventDefault();// 获取账号和密码// 提交给接口,完成登录。登录成功,跳转到 index.html (index.html是项目的首页面)$.ajax({type: 'POST',url: 'http://www.liulongbin.top:3007/api/login',data: $(this).serialize(), // 检查表单各项的name属性值success: function (res) {layer.msg(res.message);if (res.status === 0) {// 登录成功,先保存token(令牌)---------------------localStorage.setItem('token', res.token);// 登录成功,跳转到index.htmllocation.href = '/index.html';}}});
})
Git提交,
git commit -a -m '登录成功记录了token'