vue前后端分离后台管理系统(权限管理,登录),前端脚手架。对接后端基于SpringSecurity提供的后台接口

2023-11-18

文章目录

前言(很重要哦)

管理系统后端(java)请参考:https://blog.csdn.net/grd_java/article/details/121925792

本项目源码,码云:https://gitee.com/yin_zhipeng/vue-backstage-scaffolding.git

后台管理系统,一般都是内部人员使用,所以对界面要求不高,一般都使用模板开发。而前台系统,是给游客使用,要凸显个性,所以一般自己开发,不使用模板

  1. 如果你想从头到尾写,可以参考我的前台系统,每个细节都会讲到(看完完全可以自己写个模板):@TODO 日后再写
  2. 这里是后台管理系统,我们使用模板"PanJiaChen的模板简洁版"
  1. 简洁版:https://github.com/PanJiaChen/vue-admin-template
  2. 加强版:https://github.com/PanJiaChen/vue-element-admin
  1. 如果你GitHub进不去,可以到这里下载(码云)https://gitee.com/panjiachen/vue-admin-template.git

下载完成后,我们用它来当做项目,执行npm install --save 来下载相关依赖,然后通过npm run dev启动项目,最后浏览器查看项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目最终成果展示@TODO

一、概念和技术总结(重点,一定要搞懂)

这里总结项目中用到的前端知识,后面将不再赘述

  1. 大家最起码需要混个眼熟,后面代码中用到,不至于不知道这是干什么的(现在好多人,会用,但不知道为什么这么用,那你怎么优化和调优,调错呢?
  2. 如果这里有你不会或没见过的东西(看了我的介绍不懂的),可以参考官方文档(说明你压根没学过Vue的相关知识,直接百度Vue官网就行)

1. vue

组件通信的方式(最基础的6种)

  1. props:适用于父子组件通信的场景,有一个容易混淆的点,如下:
  1. 如果父组件利用props给子组件传递数据时,传递的是一个函数,其实就是子组件给父组件传递数据(因为调用的是父组件的函数)。
  2. 如果传递的不是函数,那么才是真正的父组件给子组件传递了数据(子组件使用传来的数据).
  3. 可以指定父组件传输的类型,{type:Array},也可以指定默认值{type:Array,default:[]},也可以什么都不指定,[‘todos’]
  1. 自定义事件:适用于子组件给父组件传递数据, $ on、和$ emit
  2. 全局事件总线$bus:适用于任何场景,Vue.prototype. $bus = this;
  3. pubsub-js发布和订阅:适用于任何场景,但是Vue用的不多,一般React框架经常使用
  4. Vuex:适用于任何场景,用的非常多
  5. solt插槽:使用于针对结构(标签)的父子组件通信,常用的有默认插槽,具名插槽和作用域插槽

2. vue-admin-template模板文件解析

文件目录解析(注意:以下所有文件夹和文件,你自己写效果也一样,并不是必须在这个模板文件中才能用)

build 
	--index.js webpack配置文件[我们基本不用修改]
mock
	--mock数据文件夹[模拟一些假数据,mock.js实现],我们已经有后端和接口,基本不需要它
node_modules
	--项目依赖的模块
p ublic
	--存放ico图标,静态页面等静态资源,webpack打包时,不会编译此文件夹,原封不动打包到dist文件夹
src --我们写代码的地方
	--api文件夹:异步请求相关代码
	--assets文件夹:静态资源,一般是共享的,但是这里的静态资源,webpack打包是会编译
	--components文件夹:全局组件(非路由组件)
	--icons文件夹:svg矢量图
	--layout文件夹:放置一些组件和混入mixin
	--router文件夹:与路由相关的
	--store文件夹:vuex相关的
	--style文件夹:样式相关的
	--utils文件夹:工具类,其中request.js是axios的二次封装,比较常用
	--views文件夹:路由组件(不是全局组件)
App.vue
	--根组件
main.js
	--入口文件
permission.js
	--导航守卫,主要控制登录等相关事务
settings
	--对于项目的配置项(面向展示层),比如我们浏览器标签title显示什么,表头是否固定,导航栏logo是否显示

--剩下都是配置文件
.editorconfig
	--编程风格配置,比如缩进统一2个空格
-- 很重要的3个配置文件,可以通过webpack对外暴露的函数process获取
.env.development
	-- 开发环境的配置文件
.env.production
	-- 上线环境的配置文件
.env.staging
	-- 测试环境的配置文件

-- 重要但又不重要的3个配置文件
.eslintignore
	-- eslint检测的忽略文件,对于这些文件它会忽略,和我们没关系,我们压根不用eslint检测
.eslintrc.js
	-- eslint配置文件
.gitignore
	-- 只和作者有关系,上传git的忽略文件

-- 不常用的配置文件
.travis.yml
	-- 一些语言,开发版本的配置文件
babel.config.js
	-- babel的配置文件,常用于配置按需加载,比如element ui 按需加载
jest.config.js
	-- 测试框架的配置文件
LICENSE
	-- 版权声明的文件
-- 重点配置文件
jsconfig.json
	-- 配置src别名的文件
package.json
	-- 配置项目信息,运行参数,需要的依赖
postcss.config.js
	-- css配置文件,不同浏览器的兼容问题,可以在这里解决
vue.config.js
	-- 可以当成webpack.config.js,做代理等操作,我们经常使用这个文件

router文件夹index.js解析

  1. 首先,将路由模块挂载到Vue,然后将所有路由配置封装到常量constantRoutes中,然后回调函数创建路由,挂载了常量constantRoutes,并将函数放置到常量createRouter,随后,将createRouter()这个函数常量,换了个简单的名字router。最后对外暴露router和一个重置路由的函数resetRouter()
    在这里插入图片描述
  2. 这样做,我们可以直接通过$router操作和获取路由相关信息

jsconfig.json文件配置src别名为@解析

在这里插入图片描述

3个环境配置文件,可以通过webpack对外暴露的函数process获取,注意配置文件中内容,要以VUE_APP_*****开头(就和,java类名首字母要大写一样,大家要共同遵守)

  1. 我们看下开发环境的配置文件的配置内容,测试是否能正确获取
    在这里插入图片描述
  2. main.js文件中输出process和process.env,查看结果
    在这里插入图片描述
    在这里插入图片描述
console.log(process)
console.log(process.env)

utils中auth.js文件详解

  1. 这里封装了对于权限的功能函数
    在这里插入图片描述

store文件夹详解

  1. index.js文件,主要是掌控Vuex的大局,挂载到Vue
    在这里插入图片描述
  2. getters.js文件,封装getters操作,这里统一使用lambda表达式(箭头函数),使用了上面配置的modules中的app和user中内容,例如state.app.*****
//lambda一个参数的表示形式, 我们传递的参数就是a,箭头后面是执行逻辑
a =>  return a;

在这里插入图片描述

  1. user.js,主要提供登录的state,setter(action和mutations),并暴露他们.另外app.js、settings.js文件和user.js差不多
    在这里插入图片描述
    在这里插入图片描述

3. 异步相关,前后端交互

1. 当年PanJiaChen开发此模板时,还没有async函数(ES6的语法),所以使用传统Promise处理异步,我们后面统一将其改造为使用async函数,对于Promise和async请参考文章:https://blog.csdn.net/grd_java/article/details/105384601

2. request.js文件

在这里插入图片描述

4. 导航守卫

不知道的参考官方文档https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

permission.js文件解析

  1. 此文件主要控制路由跳转的业务,像一个导航一样,可以理解为路由的拦截器
  2. 此文件主要完成的功能是,拦截一个路由跳转,判断用户是否有token,如果有,判断是否跳转路由为/login(登录路径),如果是,不允许跳转,从定向到"/"首页。如果不是登录路径,尝试获取用户信息,获取不到,尝试重新获取,重新获取失败,删除token,让用户进入登录页面重新登录
    在这里插入图片描述

5. 路由解析

记住一句话,所有路由都在找< router-view> ,所有子路由,都在找父路由组件中的< router-view>

整个路由进入首页后,为Layout组件,此组件分为3部分,sidebar导航栏,navbar顶部菜单栏,app-main内部二级路由,我们实际编写页面的地方

在这里插入图片描述

  1. 路由分析,当我们访问’/'它加载的是Layout组件,然后重定向到/dashboard,也就是二级路由,显示首页(显示到< router-view> 标签),其它的也是一样
    在这里插入图片描述
  2. Layout组件分析,一共有3个子组件
    在这里插入图片描述
  3. scrollbar在这里插入图片描述
  4. navbar
    在这里插入图片描述
  5. AppMain,可见< router-view> 标签在这个组件中,子路由会渲染到这里
    在这里插入图片描述

二、单点登录实现

登录页面直接使用模板提供的即可,我们对其样式进行一些修改,以让你知道如何对其自定义

  1. 更换背景图片,也可以使用@符号,只是需要加一个~前缀
  1. assets文件加放一张back.jpg图片
    在这里插入图片描述
  2. 修改css样式
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1. 后端接口和响应结果分析

  1. 验证码:请求captcha这个url返回一张图片
    在这里插入图片描述
  2. 登录,Post请求,传输username,password,code3个参数,全部正确,登录成功,返回tokenHead和token,最终token规定格式为,tokenHead + “空格” + token,也就是Bearer eyJh…、成功状态码20000,失败状态码20001
    在这里插入图片描述
    在这里插入图片描述
  3. 当前登录用户信息,需要携带token,注意,token格式,以及header的name为authorization
    在这里插入图片描述

2. 解决跨域,以及请求头.几乎所有项目都需要的配置,背下来吧。

1. 首先,我们知道环境配置文件中,有VUE_APP_BASE_API这个东西,我们通过这个来规定请求路径,我们可以规定它.改完记得重启项目(我们是开发环境,所以修改.env.development文件)

在这里插入图片描述

2. 然后我们通过修改webpack的配置文件vue.config.js,配置跨域代理,主要位置,别写错位置,同样,配置完记得重启项目

在这里插入图片描述

    //配置代理跨域
    proxy: {
      [process.env.VUE_APP_BASE_API]: {
        target: `http://localhost:8001`, //修改后台接口地址
        // changeOrigin: true,
        pathRewrite: {
          ['^'+process.env.VUE_APP_BASE_API]: ''
        }
      }
    },

3. token请求头这种东西,直接配置到请求拦截器中就好了,request.js,注意token请求头的key必须为authorization(因为这是我们后端规定的,不是这个,后端没法正常解析)

在这里插入图片描述

// request interceptor
service.interceptors.request.use(
  config => {
    // do something before request is sent
    if (store.getters.token) {
      // let each request carry token
      // ['X-Token'] is a custom headers key
      // please modify it according to the actual situation
      config.headers['authorization'] = getToken()
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

3. 验证码展示

后端直接返回一张图片给我们,我们可以通过window.URL.createObjectURL(response)来获取图片的一个url地址

window.URL.createObjectURL用于创建一个新的对象URL,该对象URL可以代表某一个指定的File对象或Blob对象

  1. 响应类型必须是blob或file两种格式(responseType:‘blob’ 或者 responseType:‘file’)

效果如下

在这里插入图片描述

1. 首先,我们后端的验证码功能没有响应码,而我们使用的模板,在request.js中封装了请求拦截器和响应拦截器,致命的是,响应拦截器直接拦截所有响应码不是20000的响应

  1. 这样做的好处是,所有请求如果出错(响应码不是20000),统一进行错误逻辑,但这也同样是缺点。因为针对不同错误,我们希望有不同的反馈,而不是统一的一种
    在这里插入图片描述
  2. 所以我们要丰富其功能(一个if就搞定),对于不需要code状态码的响应,如果有响应体,表示响应成功,否则表示响应失败
    在这里插入图片描述

2. 封装api请求,注意一定要将响应类型设置为’blob’(responseType:‘blob’)

  1. api/user.js添加验证码接口
    在这里插入图片描述
export function captcha() {
  return request({
    url: 'captcha',
    method: 'get',
    responseType:'blob'
  })
}

3. login页面,login/index.js文件引入api,然后展示验证码

  1. 编写函数getImgCode,通过window.URL.createObjectURL(response)封装图片为url
    在这里插入图片描述
    在这里插入图片描述
    //异步获取验证码
    async getImgCode () {
      await captcha().then(response => {
        this.codesrc = window.URL.createObjectURL(response)
      })
    },
  1. 添加组件和样式,指定函数回调(单击事件),以实现单击图片,重新生成验证码
    在这里插入图片描述
    在这里插入图片描述
//html标签
      <el-form-item prop="code" class="code">
        <span class="svg-container">
<!--          <svg-icon icon-class="el-icon-s-flag" />-->
          <i class="el-icon-edit"></i>
        </span>

        <el-input
          class="code-input"
          ref="code"
          type="text"
          v-model="loginForm.code"
          placeholder="验证码"
          name="code"
          tabindex="2"
          auto-complete="on"
          @keyup.enter.native="handleLogin"
        />

      </el-form-item>
      <img :src="codesrc" class="code-img" @click="getImgCode">
//sass样式
  .code{
    width: 70%;
    float: left;
  }
  .code-img{
    float: right;
    width: 29.6%;
    //height: 100%;
  }

4. 单点登录,退出登录,根据后端API实现

效果如下

  1. 登录后,查看token
    在这里插入图片描述
    在这里插入图片描述
  2. 退出登录,查看token
    在这里插入图片描述
    在这里插入图片描述

1. api接口

api文件夹user.js文件,修改login,getInfo和logout三个接口

在这里插入图片描述

2. 路由组件编写登录函数逻辑

我们发现,此模板所有登录逻辑都在view/login/index.vue文件中的handleLogin方法中,对其进行修改

在这里插入图片描述

    handleLogin() {
      this.$refs.loginForm.validate(valid => {
        if (valid) {//发生表单验证后
          this.loading = true//登录按钮可用
          //调用action监听,user.js下面的login
          this.$store.dispatch('user/login', this.loginForm).then(() => {
            this.$router.push({ path: this.redirect || '/' })//成功跳转路由,触发permission.js导航守卫
            this.loading = false//异步过程中,阻止登录按钮的使用
          }).catch(() => {
            this.loading = false//异步过程中,依然阻止登录按钮使用
            this.getImgCode()//登录失败,刷新验证码
          })
        } else {
          console.log('error submit!!')
          this.getImgCode()//刷新验证码
          return false
        }
      })
    }

3. 修改store(vuex)异步逻辑

所有操作都在store/user.js中,我们需要修改login和getInfo以及logout

在这里插入图片描述
在这里插入图片描述

  // user login
  //处理登录业务
  async login({ commit },userInfo) {
    //解构出用户名和密码
    const { username,password,code} = userInfo;
    //异步调用/api/user文件下的login
    let result = await login({username: username.trim(),password:password,code:code});
    if (result.code==20000){
      //我们规定token为tokenHead + " " + token字符串
      const token = result.data.tokenHead+' '+result.data.token;
      //设置到state
      commit("SET_TOKEN",token);
      //通过auth.js文件的函数,设置到cookie
      setToken(token)
    }else{
      //登录失败
      return Promise.reject(new Error(result.message));
    }
  },

  // get user info
  async getInfo({ commit, state }) {
    //异步调用/api/user文件下的login
    let result = await getInfo(state.token);
    if(result.code === 20000){
      const { loginInfo } = result.data
      if (!loginInfo) {
        return reject('验证失败,请重新登录.');
      }
      const {username} = loginInfo;
      commit('SET_NAME',username);
      commit('SET_AVATAR','https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif')
    }else{
      //登录失败
      return Promise.reject(new Error(result.message));
    }
  },
  // user logout
  async logout({ commit, state }) {
    let result = await logout(state.token);
    if(result.code === 20000){
      removeToken() // must remove  token  first
      resetRouter()
      commit('RESET_STATE')
    }else{
      //退出登录失败
      return Promise.reject(new Error(result.message));
    }
  },

5. 流程总结

  1. this.$store.dispatch(‘user/login’, this.loginForm),调用login在这里插入图片描述
    在这里插入图片描述
  2. this.$router.push({ path: this.redirect || ‘/’ })//成功跳转路由,触发permission.js导航守卫
    在这里插入图片描述
  3. 导航守卫,根据token会调用getInfo获取用户信息,获取不到,会删除token,重载路由到登录页面
    在这里插入图片描述
    在这里插入图片描述

三、后台管理系统实现

由于篇幅原因,我将其放在另一篇文章中:@TODO 还没写完

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue前后端分离后台管理系统(权限管理,登录),前端脚手架。对接后端基于SpringSecurity提供的后台接口 的相关文章

  • 尝试注册 RCTBridgeModule 类 RCTFileReaderModule

    尝试为名称 FileReaderModule 注册 RCTBridgeModule 类 RCTFileReaderModule 但该名称已由类 FileReaderModule 注册 尝试使用命令react native run ios在i
  • 如何翻转 Twitter Bootstrap 的工具提示

    我正在使用 Twitter 的 Bootstrap 来实现工具提示 目前 工具提示显示在链接上方 我希望工具提示出现在链接下方 我该怎么做呢 我正在触发工具提示 它明确指出 底部 但它不想为我工作 tooltip tooltip place
  • 如何在 HTML 表格上使用分页?

    我正在尝试使用这个分页library http flaviusmatis github io simplePagination js 在我的 HTML 表格页面 特别是浅色主题 中 但不知何故 我无法理解如何在我的 HTML 页面中以这种方
  • 如何在美人鱼节点描述中添加链接?

    我想 如下图所示 div class mermaid graph TD A hello B an b important b link A gt B div 在下面添加实际链接link指向http google com 我尝试将相关节点修改
  • 在 JQuery ui 自动完成中显示图像

    我有一个带有 JQuery ui 自动完成功能的脚本 可以完美运行 有一个显示用户名字和姓氏的搜索过程 但在我的数据库中 还有用户的图片 我想将其显示在带有名字和姓氏的建议中 数据库中pic包含图片url 剧本 function searc
  • 动态更改 vuejs 2 中的选择输入选项

    如何动态更改选择下拉 v model 中的选项 我有 2 个选择输入 其中一个应该根据其他输入进行更改 例如 如果我选择 水果 则选择显示水果 如果我选择 蔬菜 则选择显示蔬菜 我不使用Vuejs 但查看文档后 var TypesArr F
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • 加载背景图像的图像不显示

    我真的很困惑 我正在尝试创建一个带有图标和一些按钮的登陆页面 但我无法设法使我正在使用的背景图像显示出来 即使它是根据 Chrome 的开发工具包加载的 我只有这些行 索引 html div class row div class tryh
  • 如何在html中设置按钮的文本大小

    您好 我想在我的网站上有一个按钮 并且我想调整按钮上的文本大小 我该怎么做呢 我的代码如下
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • 元素不适应 Firefox 上的

    使用 ES6 ish D3js 模块运行 Angular 6 应用程序会导致 Firefox 出现问题 Chromium Chrome Safari 和 IE Edge 工作正常 伪代码看起来类似于 生产代码可以在下面找到
  • 如何动态隐藏和显示html元素

    html 输入元素使用链接标记隐藏和显示 示例 雅虎邮件密件抄送隐藏和显示 这是用 JavaScript 完成的 对于简单的 Javascript 即不使用jQuery你可以这样做 document getElementById idOfE
  • 如何显示 GroupList 的 FormArray?

    我正在尝试制作一个交互式表单 在每一行上列出一个项目以及一个删除按钮 在我的示例中称为 verwijderen 这些项目是从数据库中检索的 并且每个项目都实例化为名为的自定义对象LaborPeriod 然后这些对象被转化为FormGroup
  • CSS 动画自定义属性/变量

    一段时间以来我一直在努力让它发挥作用 关键是内部 div 将具有某种形状 并且可能会不止一个 这就是为什么我使用nth child选择器 这个内部 div 应该显示然后再次隐藏一段时间 问题是 我想在一个动画中为所有 后来的 多个内部 di
  • 在firefox上用js改变表单方法

    我需要使用 javascript jQuery 或纯 更改表单的方法属性 我的表单有 method post 我尝试用以下方法更改它 submit button click function var url input id url val
  • 有没有办法从画布上清除一个元素而不消除其他元素?

    我正在使用画布构建页面加载器 并使用 es6 类 虽然目前我无法使其正常工作 原因之一是我找不到清除画布的方法进展 到目前为止 这是我的代码 class Loader constructor width height this width
  • JsGrid 将嵌套对象加载到表中

    我正在 Django 中开发一个 Web 项目并使用 jsGrid 我遇到了问题并且找不到解决方案 我有一个嵌套的 JSON 数据 它是通过组合多个数据库表记录创建的 这是我的 JSON count 3 results personnel
  • iframe 主体删除空间

    我的 iframe 风格为style width 100 几乎覆盖了页面宽度 但它在左侧和右侧留下了一个小边距 所以我添加了body margin 0px 删除空间 它有效 但问题是删除边距影响其他事物 例如段落 p inside 有没有办
  • 错误:模块“html”不提供视图引擎(Express)

    我正在尝试设置一个简单的路由应用程序 但在渲染页面时不断遇到错误 Error Module html does not provide a view engine 奇怪的是我已经在 app js 文件中指定了视图引擎 但仍然收到错误 app

随机推荐

  • 台式机配置网站服务器,台式机搭建服务器的配置

    台式机搭建服务器的配置 内容精选 换一换 当您在升级云服务器的配置的同时 还想要将云服务器迁移到其他的AZ或Region时 您可以使用华为云的整机镜像进行迁移 迁移流程如图1所示 这里以迁移HANA数据库为例 登录管理控制台后 选择服务列表
  • fastjson反序列化泛型类

    为了代码通用 你的定义对象可能是一个泛型对象 其中可变的data属性的类型参数化 那么这个泛型类型的对象 反json化时应该注意些什么呢 Response类型 public static class Response
  • 通过paramiko远程执行windows命令出现:paramiko.ssh_exception.SSHException: Channel closed. 的解决方法

    主要问题在于为windows上的ssh的设置 paramiko连接是没有问题的 想法是远程执行windows服务器上的python程序 通过ssh连接 我在windows服务器上通过winsshd软件个windows安装了ssh服务 但是在
  • elasticSearch常见的面试题

    常见的面试问题 描述使用场景 es集群架构3个节点 根据不同的服务创建不同的索引 根据日期和环境 平均每天递增60 2 大约60Gb的数据 调优技巧 原文参考 干货 BAT等一线大厂 Elasticsearch面试题解读 掘金 设计阶段的调
  • Linux 系统与本地 windows 系统相差30s左右问题解决方案

    首先发现问题 在 linux 系统中使用 date 命令发现与本地相差大概 30s左右 通过 hwclock s 命令可将硬件时间同步至系统时间 最后在执行 date 命令发现正常了
  • 字符串常量到底存放在哪个存储区

    转 字符串常量到底存放在哪个存储区 2013年02月23日 16 57 57 若水三千你是一千 阅读数 40499更多 分类专栏 c语言 字符串常量 放在哪个存储区呢 是 自动存储区 还是 静态存储区 中 比如 char pstr hell
  • 【网络自定向下学习】——TCP报文段的详细解析

    个人主页 努力学习的少年 版权 本文由 努力学习的少年 原创 在CSDN首发 需要转载请联系博主 如果文章对你有帮助 欢迎关注 点赞 收藏 一键三连 和订阅专栏哦 目录 一 Tcp报文段的结构 二 首部长度 三 窗口大小 四 序列号和确认序
  • 接口测试的测试用例该怎么写呢

    接口测试是软件测试中非常重要的一部分 因为接口的稳定性和可靠性对于整个系统的质量和用户体验都有很大的影响 在接口测试中 编写有效的测试用例是非常关键的一步 本文将介绍如何编写接口测试的测试用例 包括测试用例的设计和编写方法 并提供一些具体的
  • import tensorflow as tf报错ModuleNotFoundError: No module named 'tensorflow'

    在安装tenserflow和keras的时候 安装完毕进行验证的时候会报错 解决方法就是需要安装tf nightly 安装完毕错误就不再报了 pip install tf nightly
  • AWS平台之DDoS攻击防范

    AWS平台之DDoS攻击防范 互联网上的DDoS攻击无处不在 游戏 互联网等大部分行业的客户也往往深受其害 本文主要介绍DDoS攻击的主要方式 AWS的基础设施和服务的介绍 以及如何利用AWS资源防范DDoS攻击 保护用户系统的安全 什么是
  • cesium加载三维模型3dtiles

    1 将数据和代码放到一个目录下 目的 为避免跨域 输入cmd命令 python3 m http server 5500 2 三维服务地址 http 127 0 0 1 5500 data mars3d max shihua 3dtiles
  • 【计算机网络】应用层HTTP协议

    文章目录 一 HTTP协议简介 二 HTTP协议的工作原理 二 HTTP协议格式 1 请求格式 2 响应格式 三 HTTP请求 1 URL 2 HTTP请求方法 3 HTTP请求报头 四 HTTP的状态码 1 HTTP 状态码的介绍 2 H
  • Azure Service Bus与Dynamics 365 Service Endpoint的之间的应用

    Dynamics 365能够通过创建Service Endpoint来传递消息给Azure的Service Bus 今天我们就来看看如何实现它们之间的联动 1 登录Microsoft Azure 并找到Service Bus 2 创建Ser
  • PyQt转换显示Python-OpenCV图像实现图形化界面的视频播放

    前往老猿Python博文目录 一 引言 在Python OpenCV中显示图像时调用的是一个单独的窗口 有时我们需要将这些图像显示在PyQt的图形化界面上 这样就可以将整个图像显示与PyQt图形化界面进行整合 但OpenCV格式的图像和Py
  • 服务器装系统提示获取分区失败,u盘安装系统分区错误解决方法

    应该有很多朋友都遇到过u盘安装系统分区错误的情况吧 那么u盘重装系统分区错误的时候我们应该如何解决呢 很多朋友就不知道了 其实u盘重装系统分区错误的解决方法是非常简单的 下面windows7之家小编就给大家带来u盘安装系统分区错误解决方法吧
  • Android中的Drawable资源—— InsetDrawable

    InsetDrawable 表示一个drawable嵌入到另外一个drawable内部 并且在内部留一些间距 存放位置 res drawable 使用方式 在Java文件中 R drawable filename 在xml布局文件中 pac
  • 大数据spark开发入门教程

    大数据是互联网发展的方向 大数据人才是未来的高薪贵族 随着大数据人才的供不应求 大数据人才的薪资待遇也在不断提升 如果你也想进入大数据行业 也想学习大数据技术 大数据讲师认为 可以先从spark技术开始 一 Spark是什么 Spark是一
  • 【C++】STL——stack&queue的基本使用

    目录 stack 一 stack简介 二 stack的定义方式 三 stack完整结构图 四 stack常用接口的使用 queue 一 queue的简介 二 queue定义方式 三 queue完整结构图 四 queue常用接口的使用 sta
  • js继承优化

    在看 js设计模式 中 作者提到了js中的两种继承方式 类继承 或 原型继承 或许是本人才疏学浅 竟发现一些问题 一 类继承 思路 作者的思路是使用基于类来继承 并且做了一个extend函数 在第一时间就吸引了我的眼球 函数如下 1 fun
  • vue前后端分离后台管理系统(权限管理,登录),前端脚手架。对接后端基于SpringSecurity提供的后台接口

    文章目录 前言 很重要哦 一 概念和技术总结 重点 一定要搞懂 1 vue 2 vue admin template模板文件解析 3 异步相关 前后端交互 4 导航守卫 5 路由解析 二 单点登录实现 1 后端接口和响应结果分析 2 解决跨