vue-cli入门(四)——vue-resource登录注册实例

前言

使用vue-resource请求接口非常方便,在使用前需安装vue-resource依赖并在入口文件main.js中声明。

实例功能简述

本实例只有简单的两个模块:登录和注册,主要演示如何用vue-resource请求接口以及后期逻辑书写。各个功能如下所示:
登录模块

登录-用户不存在

登录-密码错误

登录-成功

注销登录

注册模块

注册

项目功能梳理

在创建项目之前,我们先理一下整个项目的功能模块。
登录模块
1.用户输入用户名及密码,调用接口
  1.1用户名未找到,提示用户“用户名不存在”
  1.2用户名找到,但密码不匹配,提示用户“密码输入错误”
  1.3用户名和密码都匹配,登录成功并跳转到主页,同时将用户名存为cookie
2.加载主页获取cookie
  2.1cookie不存在,跳转到登录页
  2.2cookie存在,显示用户名
  2.3点击注销,删除cookie并跳转到登录页
3.管理员登录
  3.1输入管理员用户名及密码,跳转到管理页
注册模块
1.用户输入用户名及密码,调用接口
  1.1注册成功直接跳转到登录页

项目整体文件结构如下

项目文件结构


cookie.js为公共方法,用于cookie的存储、获取及删除
home.vue为用户登录成功之后的主页
login.vue为登录注册页
main.vue为后台管理页

开发项目

用vue-cli创建一个新项目,创建好后,因为我们要用到接口请求,所以第一步先安装vue-resource,打开cmd进入文件所在目录,输入npm install vue-resource,安装完成后在入口文件main.js中引入

 
  1. import VueResource from 'vue-resource'

  2. Vue.use(VueResource)

1.登录页

1.1 新建login.vue页面

在src中新建views/login/login.vue

 
  1. <template>

  2. <div>

  3. <div class="login-wrap" v-show="showLogin">

  4. <h3>登录</h3>

  5. <p v-show="showTishi">{{tishi}}</p>

  6. <input type="text" placeholder="请输入用户名" v-model="username">

  7. <input type="password" placeholder="请输入密码" v-model="password">

  8. <button v-on:click="login">登录</button>

  9. <span v-on:click="ToRegister">没有账号?马上注册</span>

  10. </div>

  11.  
  12. <div class="register-wrap" v-show="showRegister">

  13. <h3>注册</h3>

  14. <p v-show="showTishi">{{tishi}}</p>

  15. <input type="text" placeholder="请输入用户名" v-model="newUsername">

  16. <input type="password" placeholder="请输入密码" v-model="newPassword">

  17. <button v-on:click="register">注册</button>

  18. <span v-on:click="ToLogin">已有账号?马上登录</span>

  19. </div>

  20. </div>

  21. </template>

  22.  
  23. <style>

  24. .login-wrap{text-align:center;}

  25. input{display:block; width:250px; height:40px; line-height:40px; margin:0 auto; margin-bottom: 10px; outline:none; border:1px solid #888; padding:10px; box-sizing:border-box;}

  26. p{color:red;}

  27. button{display:block; width:250px; height:40px; line-height: 40px; margin:0 auto; border:none; background-color:#41b883; color:#fff; font-size:16px; margin-bottom:5px;}

  28. span{cursor:pointer;}

  29. span:hover{color:#41b883;}

  30. </style>

  31.  
  32. <script>

  33. export default{

  34. data(){

  35. return{

  36. showLogin: true,

  37. showRegister: false,

  38. showTishi: false,

  39. tishi: '',

  40. username: '',

  41. password: '',

  42. newUsername: '',

  43. newPassword: ''

  44. }

  45. }

  46. }

  47. </script>

1.2 配置路由

编辑/src/router/router.js

 
  1. import Vue from 'vue'

  2. import Router from 'vue-router'

  3. /*引入页面*/

  4. import Login from '@/views/login/login.vue'

  5. import Main from '@/views/main/main.vue'

  6. import Home from '@/views/home/home.vue'

  7.  
  8. Vue.use(Router)

  9.  
  10. /*配置路由*/

  11. export default new Router({

  12. routes: [

  13. {

  14. path: '/',

  15. name: 'Login',

  16. component: Login

  17. },

  18. {

  19. path: '/main',

  20. name: 'Main',

  21. component: Main

  22. },

  23. {

  24. path: '/home',

  25. name: 'Home',

  26. component: Home

  27. }

  28. ]

  29. })

在cmd输入npm run dev启动项目,在浏览器看效果

1.3 登录功能

点击登录按钮,触发login事件,登录成功会保存cookie,所以我们先把公共方法写好。新建src/assets/js/cookie.js

 
  1. /*用export把方法暴露出来*/

  2. /*设置cookie*/

  3. export function setCookie(c_name,value,expire) {

  4. var date=new Date()

  5. date.setSeconds(date.getSeconds()+expire)

  6. document.cookie=c_name+ "="+escape(value)+"; expires="+date.toGMTString()

  7. console.log(document.cookie)

  8. }

  9.  
  10. /*获取cookie*/

  11. export function getCookie(c_name){

  12. if (document.cookie.length>0){

  13. let c_start=document.cookie.indexOf(c_name + "=")

  14. if (c_start!=-1){

  15. c_start=c_start + c_name.length+1

  16. let c_end=document.cookie.indexOf(";",c_start)

  17. if (c_end==-1) c_end=document.cookie.length

  18. return unescape(document.cookie.substring(c_start,c_end))

  19. }

  20. }

  21. return ""

  22. }

  23.  
  24. /*删除cookie*/

  25. export function delCookie(c_name){

  26. setCookie(c_name, "", -1)

  27. }

login.vue页面先引用该公共方法

 
  1. <script>

  2. import {setCookie,getCookie} from '../../assets/js/cookie.js'

  3. export default{

  4. mounted(){

  5. /*页面挂载获取cookie,如果存在username的cookie,则跳转到主页,不需登录*/

  6. if(getCookie('username')){

  7. this.$router.push('/home')

  8. }

  9. },

  10. methods:{

  11. login(){

  12. if(this.username == "" || this.password == ""){

  13. alert("请输入用户名或密码")

  14. }else{

  15. let data = {'username':this.username,'password':this.password}

  16. /*接口请求*/

  17. this.$http.post('http://localhost/vueapi/index.php/Home/user/login',data).then((res)=>{

  18. console.log(res)

  19. /*接口的传值是(-1,该用户不存在),(0,密码错误),同时还会检测管理员账号的值*/

  20. if(res.data == -1){

  21. this.tishi = "该用户不存在"

  22. this.showTishi = true

  23. }else if(res.data == 0){

  24. this.tishi = "密码输入错误"

  25. this.showTishi = true

  26. }else if(res.data == 'admin'){

  27. /*路由跳转this.$router.push*/

  28. this.$router.push('/main')

  29. }else{

  30. this.tishi = "登录成功"

  31. this.showTishi = true

  32. setCookie('username',this.username,1000*60)

  33. setTimeout(function(){

  34. this.$router.push('/home')

  35. }.bind(this),1000)

  36. }

  37. })

  38. }

  39. }

  40. }

  41. }

  42. </script>

同时新建登录成功跳转到的主页 src/views/home/home.vue

 
  1. <template>

  2. <div>

  3. <h3>欢迎 {{name}}</h3>

  4. <a href="#" @click="quit">注销登录</a>

  5. </div>

  6. </template>

  7.  
  8. <script>

  9. /*引入公共方法*/

  10. import { setCookie,getCookie,delCookie } from '../../assets/js/cookie.js'

  11. export default{

  12. data(){

  13. return{

  14. name: ''

  15. }

  16. },

  17. mounted(){

  18. /*页面挂载获取保存的cookie值,渲染到页面上*/

  19. let uname = getCookie('username')

  20. this.name = uname

  21. /*如果cookie不存在,则跳转到登录页*/

  22. if(uname == ""){

  23. this.$router.push('/')

  24. }

  25. },

  26. methods:{

  27. quit(){

  28. /*删除cookie*/

  29. delCookie('username')

  30. }

  31. }

  32. }

  33. </script>

1.4 测试

现在我们来检测一下,接口是我用php写在本地上的,服务器环境用的xampp,我们先打开xampp的phpMyadmin数据库管理页看一下我们的user表

数据库user表初始数据

用户名不存在测试

然后我们来试试刚刚写的登录功能
输入用户名“张三”,密码“123”,可以看到提示区域显示“该用户不存在”,接口返回的值是-1

密码错误测试

输入用户名“刘德华”,密码“123456”,可以看到提示区域显示“密码错误”,接口返回的值是0

登录成功测试

输入用户名“刘德华”,密码“123”,可以看到提示区域显示“登录成功”,间隔1秒自动跳转到了主页,url地址栏可以看到路由的变化,接口返回值为1,打印cookie可以看到已经存在username的cookie

cookie测试

刚刚我们已经登录成功了,并且已经保存了username的cookie,现在我们在该浏览器中新建一个标签页,输入路由localhost:8080/#/可以看到路由自动跳转到了home。这个意思就是用户登录成功之后,在cookie有效期内是可以免登录直接跳转主页的。

注销登录测试

注销登录其实就是删除cookie,可以看到打印出的cookie里面已经没有了username


此时我们已经删除了cookie,再新建一个标签页,输入主页的路由,可以看到又自动跳回登录页了

1.5 管理页

前面我们登录功能主要用到的是vue-resource的post请求,接下来我们写一个get请求,其实两者都差不多,格式都为this.$http.post/get(url,data).then((res)=>{成功返回},(res)=>{失败返回})

我们新建一个管理页src/views/main/main.vue,用get请求返回所有注册的用户

 
  1. <template>

  2. <div>

  3. <h3>所有注册用户</h3>

  4. <ul>

  5. <li v-for="item in list">

  6. {{item.username}}

  7. </li>

  8. </ul>

  9. </div>

  10. </template>

  11.  
  12. <style>

  13. ul{padding: 0;}

  14. ul li{list-style: none;}

  15. </style>

  16.  
  17. <script>

  18. export default{

  19. data(){

  20. return{

  21. list: ''

  22. }

  23. },

  24. mounted(){

  25. this.$http.get('http://localhost/vueapi/index.php/Home/user/index').then((res)=>{

  26. this.list = res.data

  27. console.log(res)

  28. })

  29. }

  30. }

  31. </script>

前面创建登录页login.vue时,我们做的判断是当用户名和密码都为admin时,认为它是管理员账号,跳转到管理页main.vue
打开登录页,输入用户名“admin”,密码“admin”,可以看到路由直接跳转到main,打印出的是接口的返回值

2.注册页

2.1 在login.vue页面控制登录注册切换

前面我们在login.vue里已经写好了登录和注册两个区域,并且我们默认的是显示登录页(即showRegister 为false,showLogin 为true),现在我们要增加切换显示的方法ToRegister和ToLogin,方法很简单,写在login.vue下script标签的methods内部即可

 
  1. ToRegister(){

  2. this.showRegister = true

  3. this.showLogin = false

  4. },

  5. ToLogin(){

  6. this.showRegister = false

  7. this.showLogin = true

  8. }

查看切换效果

2.2 注册功能

点击“注册”按钮,触发register事件,在该事件中将用户输入的用户名和密码传至接口

 
  1. register(){

  2. if(this.newUsername == "" || this.newPassword == ""){

  3. alert("请输入用户名或密码")

  4. }else{

  5. let data = {'username':this.newUsername,'password':this.newPassword}

  6. this.$http.post('http://localhost/vueapi/index.php/Home/user/register',data).then((res)=>{

  7. console.log(res)

  8. if(res.data == "ok"){

  9. this.tishi = "注册成功"

  10. this.showTishi = true

  11. this.username = ''

  12. this.password = ''

  13. /*注册成功之后再跳回登录页*/

  14. setTimeout(function(){

  15. this.showRegister = false

  16. this.showLogin = true

  17. this.showTishi = false

  18. }.bind(this),1000)

  19. }

  20. })

  21. }

  22. }

2.3 测试

输入用户名“蜡笔小新”,密码“labi”,提示“注册成功”,并跳转到了登录页


此时再来查看数据库,发现多了蜡笔小新的记录


好了,到这里我们已经基本实现了一个有cookie功能的简单的登录注册小实例,主要是了解一下vue-resource接口请求的用法,对代码这一块的讲解不是很多,如果了解不够的可以去看我前面的人员管理实例,在那篇文章对各个代码都有详细解释。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值