首页 > 其他分享 >【测试平台开发】——07Vue前端框架实战——restful请求

【测试平台开发】——07Vue前端框架实战——restful请求

时间:2022-09-21 11:55:52浏览次数:75  
标签:实战 false 接口 js api 07Vue user import restful

本节主要是前后端接口的调用,以及前端如何进行封装接口

 

一、创建相关文件

在文件夹下创建http.js、api.js、user.js

1)http.js封装接口:

  • 在src下创建api文件夹

  • 添加http.js文件

  • 创建一个通用的aixos实例

  • 设置baseURL,headers

import axios from 'axios'
var instance = axios.create({
    headers: {
        'Content-Type': 'application/json'
    },
    baseURL:'http://xxx.xxxx.com:8089/'
})

export default instance

2)user.js

创建接口,引用http.js文件

import axios from './http'

// 定义常量
const user = {
    //创建登录接口
    signIn(){
       
    }}

export default user

3)api.js

把每个界面的接口都统一封装一个js里

import user from "./user"

const api = {
    user
}

export default api

二、挂载

1)main.js

把api挂载到这里,通过引用vue,就可以引用api里面的接口

import Vue from 'vue'
import './plugins/axios'
import App from './App.vue'
import router from './router'
import store from './store'
import vuetify from './plugins/vuetify'
import api from './api/api.js'

Vue.config.productionTip = false
Vue.prototype.$api = api

new Vue({
  router,
  store,
  vuetify,
  render: h => h(App)
}).$mount('#app')

三、接口文档--登录、注册

1)登录接口

 通过接口文档,完善user.js接口:

import axios from './http'

// 定义常量
const user = {
    //登录接口
    signIn(params){
        return axios.post('/user/login',params)
    }
    //
}

export default user

2)注册接口

import axios from './http'

// 定义常量
const user = {
    //登录接口
    signIn(params){
        return axios.post('/user/login',params)
    },
    //注册接口
    signUp(params){
        return axios.post('/user/register',params)
    }
}

export default user

四、前端调用后端接口

1)创建SingUp.vue文件

vue文件三部分模板

// html部分
<template>
    <div>
       注册
    </div>
</template>

// JS部分
<script>
export default {
    
}
</script>

// CSS部分
<style lang="stylus" scoped>

</style>

2)设置路由

import Vue from 'vue'
import VueRouter from 'vue-router'
import SignIn from '../components/SignIn.vue'
import SignUp from '../components/SignUp.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'SignIn',
    component: SignIn
  },
  {
    path: '/',
    name: 'SignUp',
    component: SignUp
  }
]

const router = new VueRouter({
  routes
})

export default router

3)登录界面跳转注册页面

登录界面的【注册】按钮定义方法,并且在js方法中添加跳转方法,红色标注

// Html部分
<template>
    <div class="login-form">
        <h1>登录</h1>
        <v-col cols="12">
          <v-text-field
            v-model="username"
            name = 'input-10-0'
            label="用户名"
            placeholder="请输入用户名"
            outlined
            :rules="[rules.required, rules.nameMin]"
            hint="至少8个字符"
            counter
            ></v-text-field>
        </v-col>

        <v-col cols="12">
          <v-text-field
            v-model="password"
            :append-icon="show1 ? 'mdi-eye' : 'mdi-eye-off'"
            :rules="[rules.required, rules.pwdMin]"
            :type="show1 ? 'text' : 'password'"
            name="input-10-1"
            label="密码"
            placeholder="请输入密码"
            hint="至少6个字符"
            outlined
            counter
            @click:append="show1 = !show1"
          ></v-text-field>
        </v-col>

        <v-btn depressed color="primary" elevation="12" large>立即登录</v-btn>
        <v-btn class="btn2" depressed color="primary" elevation="12" large @click="singUp()">立即注册</v-btn>
    </div>
</template>



// JS部分
<script>
export default {
    data () {
      return {
        show1: false,
        show2: false,
        show3: false,
        show4: false,
        username: '',
        password: '',
        rules: {
          required: value => !!value || '不能为空',
          nameMin: v => v.length >= 8 || '至少8个字符',
          pwdMin: v => v.length >= 6 || '至少6个字符',
          emailMatch: () => (`The email and password you entered don't match`),
        },
      }
    },
    methods:{
      singUp(){
        this.$router.push({name: 'SignUp'})
      }
    }
}
</script>



// CSS部分
<style scoped>
.login-form{
    width: 500px;
    margin: 0 auto;
    text-align: center;
    margin-top: 100px;
}
.btn2{
    margin-left: 30px;
}
</style>

跳转效果:

4)完善注册页面

接口文档里面注册接口需要:邮箱、用户名、密码

页面构建跟登录页面差不多,就直接上代码了,包括返回按钮跳转登录页面

// html
<template>
    <div class="logon-form">
        <h1>注册</h1>
        
        <v-col cols="12">
          <v-text-field
            v-model="username"
            name = 'input-10-0'
            label="用户名"
            placeholder="请输入用户名"
            outlined
            :rules="[rules.required, rules.nameMin, rules.inputMax]"
            hint="至少8个字符,最多20个字符"
            counter
            ></v-text-field>
        </v-col>

        <v-col cols="12">
          <v-text-field
            v-model="password"
            :append-icon="show1 ? 'mdi-eye' : 'mdi-eye-off'"
            :rules="[rules.required, rules.pwdMin, rules.inputMax]"
            :type="show1 ? 'text' : 'password'"
            name="input-10-1"
            label="密码"
            placeholder="请输入密码"
            hint="至少6个字符,最多20个字符"
            outlined
            counter
            @click:append="show1 = !show1"
          ></v-text-field>
        </v-col>

        <v-col cols="12">
          <v-text-field
            v-model="email"
            name = 'input-10-2'
            label="邮箱"
            placeholder="请输入邮箱"
            outlined
            :rules="[rules.required, rules.inputMax]"
            hint="最多20个字符"
            counter
            ></v-text-field>
        </v-col>

        <v-btn class="style-btn" depressed color="primary" elevation="12" large>注册</v-btn>
        <v-btn class="back-btn style-btn" depressed color="primary" elevation="12" large @click="back()">返回</v-btn>
    </div>
</template>

// JS
<script>
export default {
    data () {
      return {
        show1: false,
        show2: false,
        show3: false,
        show4: false,
        username: '',
        password: '',
        email: '',
        rules: {
          required: value => !!value || '不能为空',
          nameMin: v => v.length >= 8 || '至少8个字符',
          pwdMin: v => v.length >= 6 || '至少6个字符',
          inputMax: v => v.length <= 20 || '最多20个字符',
          emailMatch: () => (`The email and password you entered don't match`),
        },
      }
    },
    methods:{
      back(){
        this.$router.push({name: 'SignIn'})
      }
    }
}
</script>

// CSS
<style lang="stylus" scoped>
.logon-form{
  width: 500px;
  margin: 0 auto;
  text-align: center;
  margin-top: 100px;
}
.back-btn{
  margin-left: 30px;
}
.style-btn{
  width: 100px;
}
</style>

展示效果:

5)前端调用注册接口

// html
<template>
    <div class="logon-form">
        <h1>注册</h1>
        。。。。。。省略
       
        <v-btn class="style-btn" depressed color="primary" elevation="12" large @click="register()">注册</v-btn>
        <v-btn class="back-btn style-btn" depressed color="primary" elevation="12" large @click="back()">返回登录</v-btn>
    </div>
</template>

// JS
<script>
export default {
    data () {
      return {
        。。。。。。省略
        },
      }
    },
    methods:{
      back(){
        this.$router.push({name: 'SignIn'})
      },
      register(){
        let post_data = {
          username : this.username,
          password : this.password,
          email : this.email
        }
        this.$api.user.signUp(post_data).then(res=>{
          console.log(res)
        })
      }
    },
}
</script>
</style>

页面填写值,点击【注册】按钮

 解析:

register方法有两部分组成。

1、传递参数

let post_data = {
          username : this.username,
          password : this.password,
          email : this.email
        }

2、调取接口

this.$api.user.signUp(post_data).then(res=>{
          console.log(res)
        })

6)调用登录接口

点击【登录】按钮,调取登录接口

// Html部分
<template>
    <div class="login-form">
        <h1>登录</h1>
        <v-col cols="12">
          <v-text-field
            v-model="username"
            name = 'input-10-0'
            label="用户名"
            placeholder="请输入用户名"
            outlined
            :rules="[rules.required, rules.nameMin, rules.inputMax]"
            hint="至少8个字符,最多20字符"
            counter
            ></v-text-field>
        </v-col>

        <v-col cols="12">
          <v-text-field
            v-model="password"
            :append-icon="show1 ? 'mdi-eye' : 'mdi-eye-off'"
            :rules="[rules.required, rules.pwdMin, rules.inputMax]"
            :type="show1 ? 'text' : 'password'"
            name="input-10-1"
            label="密码"
            placeholder="请输入密码"
            hint="至少6个字符,最多20字符"
            outlined
            counter
            @click:append="show1 = !show1"
          ></v-text-field>
        </v-col>

        <v-btn class="style-btn" depressed color="primary" elevation="12" large @click="login()">立即登录</v-btn>
        <v-btn class="logon-btn style-btn" depressed color="primary" elevation="12" large @click="singUp()">立即注册</v-btn>
    </div>
</template>



// JS部分
<script>
export default {
    data () {
      return {
        show1: false,
        show2: false,
        show3: false,
        show4: false,
        username: '',
        password: '',
        rules: {
          required: value => !!value || '不能为空',
          nameMin: v => v.length >= 8 || '至少8个字符',
          pwdMin: v => v.length >= 6 || '至少6个字符',
          inputMax: v => v.length <= 20 || '最多20个字符',
          emailMatch: () => (`The email and password you entered don't match`),
        },
      }
    },
    methods:{
      singUp(){
        this.$router.push({name: 'SignUp'})
      },
      login(){
        let post_data = {
          username : this.username,
          password : this.password
        }
        this.$api.user.signIn(post_data).then(res=>{
          console.log(res)
        })
      }
    },
}
</script>



// CSS部分
<style scoped>
.login-form{
    width: 500px;
    margin: 0 auto;
    text-align: center;
    margin-top: 100px;
}
.logon-btn{
    margin-left: 30px;
}
.style-btn{
  width: 100px;
}
</style>

内容与注册同理

 

标签:实战,false,接口,js,api,07Vue,user,import,restful
From: https://www.cnblogs.com/Owen-ET/p/16673473.html

相关文章

  • 爬虫实战项目-数据爬取
    1.首先在爬虫之前我们应该理清楚爬虫的步骤(请求数据——获取数据——解析数据——保存数据)其中我认为里面复杂一点的就是解析数据,因为不同的数据我们需要的解析方法可能不......
  • OpenStack云计算实战手册 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/10N2ghZPMeYO0pQUt_Ub7Tw点击这里获取提取码 ......
  • SpringBoot实战电商项目商城(50k+star)地址:github.com/macrozheng/...
    经常遇到小伙伴问我之前写的技术文章在哪里。或者用很久以前的部署文档问我,为什么不能按照这篇文章进行部署。其实如果他们上过我的实战教程网站,估计就不会出现这样的问题......
  • 实战大数据 20220919笔记本10
                      ......
  • Jenkins Pipeline项目实战
    一、项目流程 Jenkins从git拉取指定tag代码Jenkins构建代码、镜像以及推送镜像到镜像库Jenkins通过PublishOverSSH通知远程服务器拉取镜像、远程服务器通过镜像启......
  • 数据实战2-出租车GPS数据
    继续上周的数据实战-本周主要围绕出租车GPS展开一、从出租车GPS数据中提取乘客出行OD1.数据清洗:是对数据进行检查和校验的过程,包括检查数据一致性,处理无效值和缺失值等......
  • 那些技术实战中的架构设计方法
    上个月我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论“以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章我其实更想......
  • 无需阿里云盘账号,直接下载阿里云盘资源,附方法和高速下载软件《优爱酷玩转下载》实战实
      前言优爱酷实战经验,付费后即可查看阅读全文。《优爱酷玩转下载》实战实录系列文章之阿里云盘风险提示:文章为友情知识分享,风险须自担,作者不承担任何责任。1.引......
  • 02.构建RESTful API相关
    几个常用注解@Controller:修饰class,用来创建处理http请求的对象@RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@R......
  • OpenResty+Lua限流实战--resty.limit.conn(用于限制并发连接数)
    限制并发场景1:按照ip限制其并发连接数原理:lua_share_dict是nginx所有woker和luaruntime共享的,当一个请求进来,往lua_share_dict记录键值对ip地址:1,当请求完成时再-1,再......