【前端项目笔记】1 登录与登出功能实现

news2024/11/26 21:49:45

项目笔记

☆☆代表面试常见题

前后端分离:后端负责写接口,前端负责调接口。
在这里插入图片描述

登录/退出功能

登录业务流程

登录页面:用户名+密码
调用后台接口进行验证
通过验证,根据后台响应状态跳到项目主页

登录业务相关技术点:
http是无状态的(登陆成功后记录状态,下面两种方式)
(1)cookie在客户端记录状态(node.js)
session在服务器端记录状态(node.js)
(2)token维持状态
服务器与前端之间Vue可能有一个跨域的问题
如果前端与后台接口不存在跨域问题——用cookie、session
存在跨域问题——用token
PS:一些跨域问题(来自博主 ^^为欢几何^^)
什么是跨域问题
向一个域发送请求,如果要请求的域和当前域是不同域,就叫跨域。
例如:就是从 A 向 B 发请求,如若他们的地址协议、域名、端口号有一个不相同,直接访问就会造成无法获取服务器发送的数据的现象。
指的是浏览器不能执行其他网站的脚本。 它是由浏览器的同源策略造成的,是浏览器对 JavaScript 施加的安全限制。
造成跨域问题的原因
1.浏览器规定:浏览器在解析Ajax请求时,要求浏览器的路径与Ajax的请求的路径必须满足三个要求,则满足同源策略,可以访问服务器。也就是说跨域问题是出现在浏览器与服务器之间,而服务器与服务器之间不存在跨域问题。
2.何为同源策略:同源指的是两个页面具有相同的协议、主机和端口,三者有任一不相同即会产生跨域。
如下图中的协议、域名、端口号分别为:
协议:http ; 域名:localhost ;端口号:5000
协议:http ; 域名:localhost ;端口号:8080
在这里插入图片描述

token原理分析
服务器提供接口,客户端需要通过Ajax访问这些接口
token由服务器生成,每个用户的token值不同
token记录登录状态,后续所有请求都要携带这个token,验证你是哪个用户
token用于身份校验,是保证登录成功后的唯一身份令牌
在这里插入图片描述

登录功能实现

el-form(表单)
el-form-item(用户名+密码+登录按钮+重置按钮)
el-input(文本输入框)
el-button (按钮)
字体图标(用户名和密码之前的小图标)

☆☆git 相关命令
git checkout -b login 创建一个叫login的分支,通过checkout命令切换到这个分支上
git branch 查看当前项的所有分支(*表示正处于此分支)
git status 查看源代码文件修改状态
在这里插入图片描述
git add . 上传所有修改文件(包括新增文件)
git commit -m "完成了登录功能" 提交代码(-m指提交的备注消息)
git checkout master 切换到master分支
git merge login 把login分支合并到master分支(先切换到master分支,再使用 git merge)
git push 本地代码推送到云端
git push -u origin login 把云端不存在的本地分支login推送到云端

CSS盒子放在页面正中间:

/* 居中 */
position: absolute;
// 距离顶部和左部各50%
left: 50%;
top: 50%;
// 横轴纵轴都往回移动50%
transform: translate(-50%, -50%);

☆☆水平居中:
方式1:position + transform(针对子元素):

position: absolute;
left: 50%;
// 横轴向左移动自身的50%
transform: translate(-50%);

方式2:flex (针对父元素):

.parent {
	display: flex;
	justify-content: center;
}

☆☆垂直居中:

☆☆CSS中的单位:
(1)长度单位:
px:像素,计算机屏幕上的一个点
em: 相对长度单位。1em等于当前字体尺寸,会继承父元素字体大小,2em等于当前字体尺寸的两倍,如果某元素以 16px 显示,那么 2em 是32px。在 CSS 中,em 是非常有用的单位,因为它可以自动适应用户所使用的字体。
%:百分比
(2)时间单位
s:秒
ms:毫秒
(3)角度单位
deg:度数
in:英寸
rad:弧度
grad:梯度
(4)重量单位
kg:千克
g:克
mg:毫克
(5)频率单位
Hz:赫兹
kHz:千赫兹
(6)分辨率单位
dpi:点每英寸
dpcm:点每厘米

/* 设置元素宽度为100像素 */
div {
  width: 100px;
}
 
/* 设置元素字体大小为1.5em */
p {
  font-size: 1.5em; /* 如果父元素的字体大小是20px,则计算出的字体大小是30px */
}
 
/* 设置元素延迟动画时间为500毫秒 */
@keyframes example {
  from {background-color: red;}
  to {background-color: yellow;}
}
 
div {
  animation-name: example;
  animation-duration: 500ms;
}
 
/* 设置元素的透明度为50% */
div {
  opacity: 0.5;
}

关于less语法(来自博主苦海123):
CSS是一门非程序语言,没有变量、函数、作用域等,此时使用rem单位就会出现图片等大量计算尺寸的问题,但是less可以轻松实现运算,它是CSS预处理语言,引入了变量、混入、函数等,常见的CSS预处理语言还有:Sass、Stylus等,Less中文网址:http://lesscss.cn

嵌套:在less中可以像html一样,如果标签是父子级关系,可以嵌套书写,编写后会生成对应的父子级形式的选择器,less语法中伪类伪元素前面要加 & 符号才表示当前元素的伪类,否则表示此元素的子代伪元素,如:

<!-- 结构 -->
<template>
    <div class="login_container">
        <div class="login_box">
            <div class="avatar_box">
                <img src="../assets/logo.png" alt="">
            </div>
        </div>
    </div>
</template>

<!-- 样式 -->
<!-- 支持less语法格式 -->
<!-- scoped只在当前节点下生效,去除则全局生效 -->
<style lang="less" scoped>
.login_container {
    background-color: #2b4b6b;
    height: 100%;
}

.login_box {
    width: 450px;
    height: 300px;
    background-color: #fff;

    .avatar_box {
        height: 130px;
        width: 130px;
        
        img {
            width: 100%;
            height: 100%;
        }
    }
}
</style>

Element ui是啥
Element UI 是一个基于Vue.js 的UI框架,它提供了一套丰富的组件和样式,帮助开发者快速构建美观、易用的Web应用程序。Element UI的组件包括但不限于表单、表格、弹窗、按钮、菜单等常见的UI元素,同时也提供了响应式的布局和主题定制等功能,以满足不同场景下的需求。Element UI的文档详细、易懂,社区活跃,是Vue.js生态中非常受欢迎的UI框架之一。12
Element UI由国内的饿了么团队开发并开源,专为开发者提供了一套优雅而灵活的UI组件。它包含了各种常用的Web组件,如按钮、表单、导航等,以及高级组件,如日期选择器、对话框等。Element UI的设计风格简洁美观,易于定制,使其成为许多Vue.js项目的首选UI框架。
此外,Element UI的安装和使用也非常简便。可以通过npm进行安装,安装成功后,可以在项目中通过引入相应的js和css文件来使用Element UI的组件库。

☆☆☆ flex弹性布局基本知识
(1)flex布局父项常见属性:

display:flex;
// 内容布局方向: 从主轴头部开始 / 从主轴尾部开始 / 居中 / 平分 / 两边贴边剩余平分
justify-content: flex-start / felx-end / center / space-around / space-between;
// 主轴方向:横轴 / 纵轴
flex-direction: row / column;
// 单行/侧轴 排列子元素的方式:stretch 拉伸
align-items: flex-start / flex-end / center / stretch;
// 多行/侧轴 排列子元素的方式
align-content: flex-start / flex-end / center / stretch / space-around / space-between;
// 是否换行:不换行 / 换行
flex-wrap: nowrap / warp;
// 将flex-wrap 与 flex-direction 复合
flex-flow: row / column  nowrap / wrap;

(2)flex布局子项常见属性:
flex-grow: 规定了 flex-grow 项在 flex 容器中分配剩余空间的相对比例。 主尺寸是项的宽度或高度,这取决于flex-direction值。 flex-grow的默认值为0,意思是该元素不索取父元素的剩余空间,如果值大于0,表示索取。值越大,索取的越厉害。如果父盒子未设宽度,那么flex为0的子盒子就是元素自身的宽度。

flex-shrink: 指定了 flex 元素的收缩规则。flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值。默认是1,等比例缩小;如果一个项目的 flex-shrink 属性为0,其他项目都为1,则空间不足时,前者不缩小。(图片来自*且听风吟)
在这里插入图片描述
在这里插入图片描述

flex-basis: 表示表示项目占据主轴空间的值。默认为auto,表示项目当前默认的大小。如果设置为一个固定的值,则该项目在容器中占据固定的大小。它的初始值是 auto,此时浏览器会检查元素是否设置了 width 属性值。如果有,则使用 width 的值作为 flex-basis 的值;如果没有,则用元素内容自身的大小。如果 flex-basis 的值不是 auto,width 属性会被忽略。当width为0的时候,我们是看不到元素的。但当flex-basis为0,或者为auto并且width没有设置值的时候(默认值为0),该元素的大小是由内容大小决定的。也就是只要有内容,flex-basis是不会看不到元素的。
设为auto和0也是有区别的。一个最明显的区别就是为0的时候,如果内容文字有空格是自动换行的。这个可以通过设置white space:nowrap解决。auto就没有这个问题。 flex-basis: 0​ 意味着项目不会根据内容调整初始大小,而 ​flex-basis: auto​ 则允许项目根据内容或显式设置的尺寸来调整初始大小。

flex布局定义子项目剩余空间,表示占用份数

// 表示占用2份
flex: 2;

在这里插入图片描述
flexflex-grow、flex-shrink、flex-basis三个属性的复合(默认:0 1 auto)
注意,flex:1和只写一个flex-grow:1是不一样的。
写成flex:1,flex-shrink,flex-basis的默认值是1和0%。
而写成flex-grow:1,flex-shrink,flex-basis的默认值是1和auto。也就是flex-basis是不同的。

align-self 定义子项目在侧轴上的排列方式

align-self:flex-start / flex-end / center / stretch;

order 定义子项目排列顺序,数量越小越靠前,默认为0

☆☆box-sizing 为border-box和content-box的区别:
content-box(标准W3C盒模型,默认): 块总宽度=width+margin+padding+border
在这里插入图片描述

border-box(IE盒模型):块总宽度=width(包含padding+border)+margin
在这里插入图片描述
内边距padding(上右下左):

/* 应用于所有边 */
padding: 1em;

/* 上边下边 | 左边右边 */
padding: 5% 10%;

/* 上边 | 左边右边 | 下边 */
padding: 1em 2em 2em;

/* 上边 | 右边 | 下边 | 左边 */
padding: 5px 1em 0 2em;

表单验证

(1) 为el-form通过属性绑定指定rules校验对象
(2) 在data中定义校验对象,每一个属性都是一个验证规则
(3) 为el-form-item通过prop项指定验证规则
在这里插入图片描述
在这里插入图片描述

重置

(1)拿到表单的实例对象,使用ref引用
(2)通过this访问到$refs.引用对象,再使用表单的重置函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

登录前的预验证

发起请求前对表单数据进行预验证,通过后发起登录请求,否则提醒用户表单数据不合法。
(1)先获取到表单的引用对象
(2)再调用引用对象的valid函数进行表单的预校验,在valid中接收一个回调函数,其中第一个形参是验证结果boolean,通过这个boolean判断验证是否通过
在这里插入图片描述

根据预验证结果是否发起登录请求

涉及到箭头函数、promise、async、await、异步处理
在这里插入图片描述

登录状态的弹窗提示

导入element-ui导入Message
Message需要进行全局挂载,挂载为Vue原型上的一个属性
Vue.prototype. m e s s a g e = M e s s a g e 在每个组件中可使用 t h i s . message = Message 在每个组件中可使用this. message=Message在每个组件中可使用this.message中的方法

登录组件登录成功之后的行为

1.将登录成功之后服务器分配的token,保存到客户端的sessionStorage中
1.1 项目中除了登录之外的其他API接口,必须在登录之后才能访问(token相当于通行证,记录已经登录)
1.2 token只应在当前网站打开期间生效,所以将token保存在 sessionStorage中(localStorage是持久化的存储机制,sessionStorage是会话期间的存储机制)
2.通过编程式导航跳转到后台主页,路由地址是/home
sessionStorage & localStorage

路由导航守卫控制访问权限

home页面只能在登录状态下才能访问。如果用户没有登录,但是直接通过URL访问特定页面,需要重新导航到登录页面。
在这里插入图片描述

退出功能

销毁本地的token,再重定向到登录页
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1816556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.6 探讨软件系统的三高设计和容错机制设计

一、引言 1. 软件系统的重要性 软件系统的三高性能设计和容错性设计是非常重要的&#xff0c;因为它们直接影响着系统的可用性、可靠性和效率。以下是它们的重要性&#xff1a; 1. 高性能设计&#xff1a;高性能设计意味着系统能够在高负载和大并发情况下仍能保持良好的响应…

【YOLOv8改进[CONV]】使用MSBlock二次创新C2f模块实现轻量化 + 含全部代码和详细修改方式 + 手撕结构图 + 轻量化 + 涨点

本文将使用MSBlock二次创新C2f模块实现轻量化,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法,实现有效涨点。 改进前和改进后的参数对比: 目录 一 MSBlock 二 使用MSBlock二次创新C2f模块实现轻量化 1 整体修改 …

为什么高考志愿只选计算机专业?

刚刚高考结束&#xff0c;不知道各位学弟学妹考的怎么样啊&#xff1f; 高考毕竟是对十二年寒窗苦读的评判&#xff0c;也是很多人改变命运的机会。很多同学每天等待出分的过程很煎熬&#xff0c;既吃不好也玩不好&#xff08;os&#xff1a;这种同学还挺多的&#xff09;。 但…

万字长文讲解Linux内存管理:伙伴系统

1. buddy system简介&#xff1a; 伙伴系统是内核中用来管理物理内存的一种算法&#xff0c;我们知道内存中有一些是被内核代码占用&#xff0c;还有一些是被特殊用途所保留&#xff0c;那么剩余的空闲内存都会交给内核内存管理系统来进行统一管理和分配。 内核中会把内存按照…

php redis分布式锁

一&#xff0c;概念 在PHP中实现分布式锁通常可以使用数据库、缓存系统&#xff08;如Redis&#xff09;或者其他中央存储系统来保证在分布式系统中的数据一致性与同步。秒杀下单、抢红包等等业务场景&#xff0c;都需要用到分布式锁。 常规方案大概有七中 方案一&#xff1a;…

uniapp小程序计算地图计算距离

我们拿到自身和目标距离经纬度 调用此方法即可计算出自身与目标的距离 最后我所展示的页面如下 具体效果可能会有点偏差 要求严格的可以在精细的计算一下

2024版CorelDRAW中文破解授权码激活码!立即下载CorelDRAW中文版终身永久破解下载攻略

在设计领域&#xff0c;CorelDRAW一直以其强大的图形编辑和矢量绘图功能而受到专业用户的青睐。随着CorelDRAW 2024的发布&#xff0c;设计师们迎来了更加丰富的工具和更新的功能&#xff0c;使得创意实现更为轻松和精准。对于追求成本效益的用户而言&#xff0c;CorelDRAW 202…

港口企业需要什么样的替代FTP软件进行传输?

随着港口货物吞吐量的显著增长&#xff0c;信息交换的需求也随之大幅增加&#xff0c;这对港口的物流处理能力构成了挑战&#xff0c;同时也对数据传输的效率提出了更高的标准。历史上&#xff0c;FTP因其用户友好性&#xff0c;在众多港口企业中承担着关键的文件传输任务。但是…

LeetCode 算法: 旋转图像c++

原题链接&#x1f517;&#xff1a; 旋转图像 难度&#xff1a;中等⭐️⭐️ 题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图…

Kali之metasploit学习

目标&#xff1a;尝试使用metasploit制作一个windows 后门&#xff08;exe文件&#xff09; 一&#xff1a;使用metasploit生成一个exe安装包。 二、将对应的可执行文件放入到目标机 python3 -m http.server 端口号&#xff1a; 模块化启动一个端口。 windows 证书管理工具&…

Codeforces Global Round 26 D. “a“ String Problem 【Z函数】

D. “a” String Problem 题意 给定一个字符串 s s s&#xff0c;要求把 s s s 拆分成若干段&#xff0c;满足以下要求&#xff1a; 拆分出来的每一个子段&#xff0c;要么是子串 t t t&#xff0c;要么是字符 a a a子串 t t t 至少出现一次 t ≠ " a " t \ne…

机器学习分类及算法

1. 深度学习 1.1学习算法 1.2基本术语和概念 1.3机器学习分类常用算法 1.3.1线性回归 1.3.2逻辑回归 1.3.3决策树 1.3.4朴素贝叶斯 1.3.5支持向量机SVM 1.3.6K-最近临邻KNN 还有K-均值&#xff08;k-means&#xff09;、随机森林、降维、人工神经网络等 1.4超参数和验证集 1.4.…

【必会面试题】Java异常类型

目录 在Java中&#xff0c;异常和错误都继承自java.lang.Throwable类&#xff0c;这是Java异常处理机制的基础类。Throwable类有两个主要的子类&#xff1a;Exception&#xff08;异常&#xff09;和Error&#xff08;错误&#xff09;。 Error&#xff08;错误&#xff09;: …

MySQL之高级特性(三)

高级特性 分布式(XA)事务 存储引擎的事务特性能够保证在存储引擎级别实现ACID,而分布式事务则让存储引擎级别的ACID可以扩展到数据库层面&#xff0c;甚至可以扩展到多个数据库之间——这需要通过两阶段提交实现。MySQL5.0和更新版本的数据库已经开始支持XA事务了。XA事务中需…

时序分解 | Matlab实现SCSSA-VMD融合正余弦和柯西变异的麻雀搜索算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现SCSSA-VMD融合正余弦和柯西变异的麻雀搜索算法优化变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现SCSSA-VMD融合正余弦和柯西变异的麻雀搜索算法优化变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab…

vue-2 组件传值

组件关系分类 父子关系非父子关系 父子通信流程 父组件通过props将数据传递给子组件 给子组件以添加属性的方式传值子组件内部通过 props 接收模板中直接使用 props 接收的值 父组件 Parent.vue <template><div class"parent" style"border: 3px s…

全网首发-Docker被封后的代理设置教程

最近上交、科大以及阿里的一些docker镜像&#xff0c;好像都因为不可控力导致无法访问。 所以&#xff0c;之前好多正常的一些镜像的打包都会报错&#xff1a; 比如&#xff1a; #1 [internall load build definition from Dockerfile#1transferring dockerfile:972B done#1 D…

Day 13:3072. 将元素分配到两个数组中 Ⅱ

Leetcode 3072. 将元素分配到两个数组中 Ⅱ 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中** 严格大于** val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到…

一种基于混合协作的约束多目标优化的新型多群体进化算法

A novel multi-population evolutionary algorithm based on hybrid collaboration for constrained multi-objective optimization 原文链接: https://doi.org/10.1016/j.swevo.2024.101581 Wang Q, Li Y, Hou Z, et al. A novel multi-population evolutionary algorithm bas…

网络编程(一)基本概念、TCP协议

文章目录 一、概念&#xff08;一&#xff09;网络发展阶段1. ARPAnet阶段2. TCP/IP两个协议阶段3. 网络体系结构和OSI开放系统互联模型4. TCP/IP协议簇体系结构&#xff08;1&#xff09; 应用层&#xff1a;&#xff08;2&#xff09;传输层&#xff1a;&#xff08;3&#x…