Vue+element-ui+axios实现登录注册接口(一)

Vue+element-ui+axios实现登录注册接口

1、首先保证你的后台、数据库都已经准备完毕

如果是vue前后端分离的项目,就可以让负责后台的小伙伴直接帮你部署好一个jar包,就像下面这张图这样,记住它的地址。

jar包目录
记住地址后在自己的命令行窗口打开jar包所在目录,然后输入java -jar+jar包文件名,如下图,就可以把后台直接运行起来了,这样子前端就不用自己去idea下载jar包啦,省去一堆事,直接载一个postman测试一下地址就可以。

命令行运行后台界面

当然不要忘记数据库,向负责后台的小伙伴要来sql命令行,插入到自己的数据库软件里,我用的是Navicat Premium,不要忘记数据库的名字要一致。这里给大家看下我的登录页面的用户名和密码数据库。
数据库

后台运行起来了,也有了数据库,接下来就可以开始用postman测试,在这之前记得让后台伙伴发给你一个接口文档,类似于这样:
接口文档

举个例子,比如以用户名14725836912测试能否返回登录成功,就根据接口文档输入下相关信息就可以,message为success就说明测试成功啦。

postman测试登录
2、前端登录页面表单html

<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" autocomplete="on" label-position="left">
<!-- 手机号 -->
      <el-form-item prop="username">
        <span class="iconfont svg-container">
          &#xe632;
        </span>
        <el-input
          ref="username"
          v-model="loginForm.username"
          placeholder="请输入手机号"
          name="username"
          type="text"
          tabindex="1"
          autocomplete="on"
        />
      </el-form-item>
<!-- 输入密码 -->
      <el-form-item prop="password">
          <span class="iconfont svg-container">
            &#xe663;
          </span>
          <el-input
            :key="passwordType"
            ref="password"
            v-model="loginForm.password"
            :type="passwordType"
            placeholder="请输入密码"
            name="password"
            tabindex="2"
            autocomplete="on"
            @blur="capsTooltip = false"
            @keyup.enter.native="handleLogin"
          />
          <span class="el-icon-view show-pwd" @click="showPwd">
          </span>
      </el-form-item>

      <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">登录</el-button>
      <!-- 其他登录方式 -->
      <div style="text-align:right; width:100%">
        <el-checkbox v-model="checked" style="float:left; text-align:left;">记住密码</el-checkbox>
        <router-link to="/regist" style="color:#409EFF"> 注册新用户 </router-link>
      </div>
    </el-form>

这里主要是利用了v-model,绑定了用户名和密码,通过elementui的rule校验规则对用户名和密码的格式进行校验。

3、接着看下script

export default {
  data() {
    return {
      loginForm: {
        username: '14725836912',
        password: '123456789'
      },
      // 用户名和密码规则
      loginRules: {
        username: [
          { required: true, trigger: 'change' },
          {min:11,max:11,message:'请输入11位手机号',trigger: 'blur'}
        ],
        password: [
          { required: true, trigger: 'change' },
          {min:6,max:10,message:'密码须为3-10个字符',trigger: 'blur'}
        ]
      },
      passwordType: 'password',
      capsTooltip: false,
      loading: false,
      showDialog: false,
      redirect: undefined,
      otherQuery: {},
      checked: false
    }
  },
  
  mounted() {
    //如果输入框为空聚焦输入框
    if (this.loginForm.username === '') {
      this.$refs.username.focus()
    } else if (this.loginForm.password === '') {
      this.$refs.password.focus()
    };
    this.getCookie();
  },
  methods: {
    showPwd() {
      if (this.passwordType === 'password') {
        this.passwordType  = ''
      } else {
        this.passwordType = 'password'
      }
      //点完显示密码后聚焦输入框
      this.$nextTick(() => {
        this.$refs.password.focus()
      })
    },
    //登录按钮
    handleLogin() {
      this.$axios({
        method: 'post',
        url: '/api/v1/login',
        headers: {
            'Content-Type': "application/json;charset=UTF-8"
        },
        data: {
          name: this.loginForm.username,
          password: this.loginForm.password
        }
      })
      .then(res=>{                    //请求成功后执行函数
        if(res.data.message === 'SUCCESS'){
          this.$router.push('/')	//登录验证成功路由实现跳转
          this.$notify({
            title: '提示',
            message: '用户登录成功',
            duration: 3000
          });
        }else{
          this.$notify({
            title: '提示',
            message: '用户登录失败',
            duration: 3000
          });
        }
      })
      .catch(err=>{                   //请求错误后执行函数
        his.$notify({
              title: '提示',
              message: '用户访问错误',
              duration: 3000
            });
        console.log(err)
      })
    }
  }
}
</script>

这里我就主要讲方法啦,showPwd是那个显示密码的按钮,此处就不再赘述,主要要说的是登录按钮的功能。

4、登录按钮+axios获取后台数据

在使用axios记得先在main.js全局引用一下,同时在vue.config.js里配置一下后台地址,加入一个proxyTable就可以啦,比如我这个:

module.exports = {
  dev: {
    host: 'localhost', // can be overwritten by process.env.HOST
    port: 8080, 
    proxyTable: {
      '/api': {
        target:`http://localhost:8181`,
        changeOrigin: true,
        ws: true,
        // pathRewrite: {
        //   '^/api': ''
        // }
      }
    }
   

changeOrigin: true和ws: true涉及跨域问题,此处不再赘述,由于我在main.js里设置了axios.defaults.baseURL='http://localhost:8181',所以pathRewrite就没有设置,小伙伴们也可以查阅下这个的用法,之后写后台地址的时候直接写8181后面的地址就可以了。

对于登录按钮handlelogin,我这里是以loginForm整体来提交给后台,所以要注意下data的格式,当然还有要注意下method和headers的内容。

你们可以看到我输入正确的用户名和密码点了登录之后呢message显示为success,这就表明确实有这么一个人,因此我们在写handlelogin这个方法的时候就可以以res.data.message === 'SUCCESS'是否成立来判断可不可以登录成功。

下面这张图我们可以看到一个token值,这个token非常重要噢,我们下次再讲讲它怎么用。

返回内容
5、结语

好了今天关于登录接口的分享就到这里,关于注册的代码我们下期再见。

本篇文章如有错的地方,欢迎在评论指正。喜欢在微信看技术文章,可以微信搜索「胡录乱影」,回复【Python】【前端基础】【vue开发】即可获得视频资源,回复【答辩PPT】【演讲PPT】即可获得超级实用PPT模板,还有更多资料,建议后台留言或者直接私信我。

另,如果觉得这本篇文章写得不错,有点东西的话,各位人才记得来个三连【点赞+关注+分享】。

  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现分页的思路大致如下: 1. 在Vue的data中定义一个数组,用于存放分页数据。 2. 在mounted函数中发起请求获取数据,并将数据存放到定义的数组中。 3. 在页面上使用Element-ui的Table组件展示数据,并且使用Pagination组件实现分页功能。 4. 当用户点击分页按钮时,触发pagination的current-change事件,重新请求数据并更新数组中的数据。 以下是一个简单的例子: ``` <template> <div> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="sex" label="性别"></el-table-column> </el-table> <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" :total="total"> </el-pagination> </div> </template> <script> import axios from 'axios'; export default { data() { return { tableData: [], currentPage: 1, pageSize: 10, total: 0 }; }, mounted() { this.fetchData(); }, methods: { fetchData() { axios.get('/api/data', { params: { page: this.currentPage, pageSize: this.pageSize } }).then(response => { this.tableData = response.data.list; this.total = response.data.total; }); }, handlePageChange(currentPage) { this.currentPage = currentPage; this.fetchData(); } } }; </script> ``` 在上面的例子中,我们使用Element-ui的Table和Pagination组件,并且使用axios来发起请求。在mounted函数中,我们调用fetchData函数来获取数据,并将数据存放到tableData数组中。在页面上,我们将tableData数组作为Table组件的data属性传递,展示数据。同时,我们使用Pagination组件来实现分页功能。当用户点击分页按钮时,我们调用handlePageChange函数来更新currentPage变量,并重新调用fetchData函数来获取新的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值