文章目录

  • login
    • #0 GitHub
    • #1 环境
    • #2 实现功能
    • #3 iView

login

#0 GitHub

https://github.com/Coxhuang/iView-login

#1 环境

"vue": "^2.5.2",
"axios": "^0.19.0",
"vue-axios": "^2.1.4",
"vue-router": "^3.0.1",
"view-design": "^4.0.0" // iView-UI 组件
  1. iView – UI组件
  2. axios – 发送http请求
  3. localStorage – 存储TOKEN

#2 实现功能

  1. 登录
  2. 获取TOKEN
  3. 保存TOKEN
  4. 发送http请求携带TOKEN

#3 iView

具体如何配置iView这里直接跳过

  1. 新增以下文件
src/components/login/login.less
src/components/login/login.vue
src/components/login-form/login.js
src/components/login-form/login-form.vue
src/utils/axios.js
src/api/index.js
src/api/api.js

src/components/login/login.less

样式

.login{width: 100%;height: 100%;background-image: url('../../assets/images/login-bg.jpg');background-size: cover;background-position: center;position: relative;&-con{position: absolute;right: 160px;top: 50%;transform: translateY(-60%);width: 300px;&-header{font-size: 16px;font-weight: 300;text-align: center;padding: 30px 0;}.form-con{padding: 10px 0 0;}.login-tip{font-size: 10px;text-align: center;color: #c3c3c3;}}
}

src/components/login/login.vue

login父组件

<style lang="less">@import './login.less';
</style><template><div class="login"><div class="login-con"><Card icon="log-in" title="欢迎登录" :bordered="false"><div class="form-con"><login-form @on-success-valid="handleSubmit"></login-form><p class="login-tip">输入任意用户名和密码即可</p></div></Card></div></div>
</template><script>import LoginForm from '@/components/login-form' // 驼峰命名法export default {data(){return{}},components: {LoginForm},methods:{handleSubmit({username, password}){this.$api.api_all.post_user_login_api(username,password).then((response)=>{this.$Message.success(response.data.msg);localStorage.setItem('TOKEN', JSON.stringify(response.data.results.TOKEN)); // 设置TOKENthis.$router.push("/") // 跳转到首页}).catch((error)=>{this.$Message.error(error.response.data.msg);})}}}
</script>

src/components/login-form/login.js

导出子组件

import LoginForm from './login-form.vue'
export default LoginForm

src/components/login-form/login-form.vue

login子组件

<template><Form ref="loginForm" :model="form" :rules="ruleslogin" @keydown.enter.native="handleSubmit"><FormItem prop="username"><Input v-model="form.username" placeholder="请输入用户名"><span slot="prepend"><Icon :size="16" type="ios-person"></Icon></span></Input></FormItem><FormItem prop="password"><Input type="password" v-model="form.password" placeholder="请输入密码"><span slot="prepend"><Icon :size="14" type="md-lock"></Icon></span></Input></FormItem><FormItem><Button @click="handleSubmit" type="primary" long>登录</Button></FormItem></Form>
</template><script>
export default {name: 'LoginForm',data () {return {form: {username: 'admin',password: 'cox123456'},ruleslogin:{ // 校验表单规则username: [ // FormItem标签中的 prop 属性预期值{ required: true, message: '用户名不能为空', trigger: 'blur' }],password: [ // FormItem标签中的 prop 属性预期值{ required: true, message: '密码不能为空', trigger: 'blur' },{ type: 'string', min: 6, message: '6位数密码', trigger: 'blur' }]}}},methods: {handleSubmit () {this.$refs.loginForm.validate((valid) => {// this.$refs.loginForm.validate : 获取表单校验结果; 校验正确-> valid为True; 校验失败-> valid为False;if (valid) {this.$emit('on-success-valid', {username: this.form.username, // 将this.form.username和this.form.password传给父组件的on-success-valid参数password: this.form.password // 并使用 username 和 password 接受})}})}}
}
</script>

src/utils/axios.js

axios拦截

import axios from 'axios' // 导入node_modules里的axios
import qs from 'qs'axios.defaults.baseURL = "http://127.0.0.1:8000/"; // 后端接口 ip:portaxios.interceptors.request.use((request) => {//在发送请求之前做某件事var token = JSON.parse(localStorage.getItem('TOKEN'));if (token) {token = "TOKEN " + token;request.headers.common['Authorization'] = token;}if(request.method  === 'post'){request.data = qs.stringify(request.data);}return request;
},(error) =>{console.log('错误的传参');return Promise.reject(error);
});export default axios // 导出axios

src/api/index.js

导出api.js

import api_all from './api'export default {api_all
}

src/api/api.js

后端api接口 (我这里用的是Django框架,具体接口代码不在这里过多解释,也可以使用mock假数据作为后端接口)

import axios from '@/utils/axios'const api_all = {// 获取所有博文列表post_user_login_api(username,password) {return axios({url: '/api/user/login/',method: 'POST',data: {username: username,password: password,}})},get_article_list() {return axios({url: '/api/article/list-article/',method: 'GET',})},create_test(dog) {return axios({url: '/api/test/create/',method: 'POST',data: {dog: dog},})},
};export default api_all

main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import ViewUI from 'view-design';
import 'view-design/dist/styles/iview.css';
import axios from "./api/";Vue.prototype.$api = axios;
Vue.use(ViewUI);
Vue.config.productionTip = false;/* eslint-disable no-new */
new Vue({el: '#app',router,store,components: { App },template: '<App/>'
});




Vue 登录login例子相关推荐

  1. Springboot Vue Login(从零开始实现Springboot+Vue登录)

    实现前端后端分离,在 Github 上有一个很好的开源项目:mall,正所谓百看不如一练,自己动手实现了一个 Springboot+Vue 的登录操作,在此记录一下踩过的坑. 文章最后补充两端的 Gi ...

  2. Vue登录第2.1版

    前面已经完成了Vue登录第1版,仅仅是使用JS进行了前端登录验证.下面将在第1版的基础上,使用SpringBoot完成后端程序,通过状态码的传输实现登录认证.这里称其为Vue登录第2.1版. Vue登 ...

  3. Vue登录注册,并保持登录状态

    关于vue登录注册,并保持登录状态,是vue玩家必经之路,网上也有很多的解决方法,但是有一些太过于复杂,新手可能会看的一脸懵逼,现在给大家介绍一种我自己写项目在用而且并不难理解的一种方法. 项目中有一 ...

  4. Vue登录注册,并保持登录状态 1

    关于vue登录注册,并保持登录状态,是vue玩家必经之路,网上也有很多的解决方法,但是有一些太过于复杂,新手可能会看的一脸懵逼,现在给大家介绍一种我自己写项目在用而且并不难理解的一种方法. 项目中有一 ...

  5. 【Vue作业]---Vue登录注册界面

    1.引言 你是否有过相关设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题.你想要解决 ...

  6. weexpack 的 Login.vue 及 vue 的 Login.vue

    1.登录页 weexpack  Login.vue <!-- 登录页 --> <template><div class="wrapper"> & ...

  7. Vue登录时校验验证码

    Vue登录时校验验证码 环境: 前端:Vue 后端:SpringBoot 前一章已写过如何实现验证码:https://blog.csdn.net/weixin_45732391/article/det ...

  8. 如何构建一个vue登录系统之登录页面

    1. 在assets中新建一个css文件夹和imgs文件夹 2. 在src/views文件夹下新建一个Login.vue页面 3. 在src/main.js中引入全局公共样式文件style_publi ...

  9. 登录文档服务器,服务器登录login

    服务器登录login 内容精选 换一换 本章节介绍如何使用弹性云服务器管理控制台上提供的远程登录(VNC方式)和如何使用密钥或密码方式(SSH方式)登录MRS集群中的节点,远程登录主要用于紧急运维场景 ...

最新文章

  1. aes前台加密后台解密
  2. 数据库实例(统计最高分学生信息,不及格率等等)
  3. JavaScript splice() 方法
  4. Linux uart寄存器读写,Linux下读写UART串口的代码
  5. 2018年科技将怎样改变世界?阿里12位科学家发布年度科技趋势预测
  6. 抵御物联网DDoS军团
  7. 视图加载时自动执行铵钮事件
  8. 字符数组拷贝与strcpy函数
  9. 一次性说清楚秒验(本机号码一键登录)基本原理、优势、场景、交互过程和常见的问题
  10. 清华大学张文增教授110页PPT讲专利申请、检索与解读
  11. 什么是ZooKeeper
  12. 暨南大学人文社科a类期刊_关于调整人文社科B类和C类期刊目录的通知
  13. 为 WSO2 ESB 5.0.0 集群配置 MySQL 数据库
  14. 背包那些经典的例子( 上 )
  15. 第1节 虚拟机及常用系统配置步骤
  16. 计算机图形学---简单光照明模型知识汇总
  17. Hardhat以太坊智能合约开发框架基础教程
  18. 谷粒商城学习笔记(更新中)
  19. Vue+el-tree,元素拖拽时出现禁用图标, 请看解决办法
  20. 贪吃蛇c语言中加速怎么写,刚学C语言,想写一个贪吃蛇的代码

热门文章

  1. 废旧纸箱做机器人图片_近百斤硬纸板造出三米高“机器人”(图)
  2. python 判断类型是数字_python能否判断数字类型
  3. childNodes,nodeType
  4. 《例说51单片机(C语言版)(第3版)》——1-5 MCS-51的开发流程与工具
  5. 信息项目管理师 第8章 项目整合管理
  6. 中餐菜单分类名称创意_中式菜单的命名
  7. DX9绘图基础-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(7)
  8. Micropython驱动ST7735显示中文(中文字体库)
  9. 2020.5.20表白日教你把照片快速制作成爱心形状!!!
  10. BootStrap实现带有增删改查功能的表格(DEMO详解)