uniapp luch-request 使用教程+响应对象创建

1. 介绍

  luch-request 是一个基于 Promise 开发的 uni-app 跨平台、项目级别的请求库。它具有更小的体积、易用的 API 和方便简单的自定义能力。luch-request 支持请求和响应拦截、全局挂载、多个全局配置实例、自定义验证器、文件上传/下载、任务操作、自定义参数以及多拦截器等功能。

2. 项目快速启动

安装

使用 npm 安装 luch-request

npm install luch-request -S
创建实例

在项目中创建一个 request 实例(utils/request.js),并进行基本的配置:

request.js:

import Request from 'luch-request'

const baseUrl = 'http://192.168.1.167:8080/';

const http = new Request();

/** 设置全局配置 */
http.setConfig(config => {
	config.baseURL = baseUrl;// 配置基础url
	config.header = {
		'Content-Type': 'application/json;charset=UTF-8',
		"Access-Control-Allow-Origin": "*",
	};
	config.timeout = 15 * 1000;// 请求超时时间15s
	
	return config
})

/** 请求之前拦截 */
http.interceptors.request.use(config => {
	uni.showLoading({
		title: '数据加载中...',
		mask: true
	});
	// 设置5s中
	setTimeout(function(){
		uni.hideLoading()
	},5000)


	/* if (uni.getStorageSync('resToken')) {
		config.header["Authorization"] = `Bearer ${uni.getStorageSync("resToken")}`;
	} */
		
	return config
},
error => {// 失败
	return Promise.reject(error)
})

/** 响应拦截器 */
http.interceptors.response.use(response => {
	console.log("response",response)
	// 解析response.data中数据,根据返回值修改
	const {
		data,
		success,
		message,
		token,
	} = response.data

	//console.log("message",message)
	//console.log("success",success)
	
	if (success) {
		uni.hideLoading()
		// 存储token到本地
		uni.setStorageSync('resToken', token)
		
		return response.data
	}else{
		uni.showToast({
			//title: message,
			title:"请求失败",
			icon: 'error',
			duration:2000,// 显示2s
		})
		uni.setStorageSync('resToken', null)
		// 跳转回登录页面
		uni.switchTab({
			url: '/pages/login/login'
		})
	}
},
error =>{
	// 对响应错误做点什么
	return Promise.reject(error);
})


export default http;

3.创建请求方法

项目中创建api/api.js:

api.js:

import http from '@/utils/request.js'


// 获取用户信息-无参数
export function loginUser(){
	return http.get('/api/loginUser.api')
}

// 登录post请求 
export function LoginPostMethod(data) {
	return http.post(
		`/api/login.api?account=${data.account}&password=${data.password}`
	)
}

// 登录post请求-Map<String, String>对象参数 
export function LoginPostParamsMethod(data) {
    // data 必须为对象
	return http.post('/api/paramsLogin.api',data)
}

// 登录get请求 
export function LoginGetMethod(data) {
	return http.get(
		`/api/login.api?account=${data.account}&password=${data.password}`
	)
}

// 登录get请求-params参数 (只能get请求写params参数,post请求不能这么写报错)
export function LoginGetParamsMethod(data) {
	return http.get(
		'/api/paramsLogin.api',{
			params: {
				acc: data.account,
				psw: data.password
			}
		}
	)
}


// 箭头函数 - 修改密码
export const updatePassword = (data) =>{
	return http.post('/api/updatePassword.api',data)
}


// 上传图片
/* export function upPhoto(data) {
	return http.upload('app/inspection/inspectionPictureUploaded', {
		filePath: data.file.path,
		name: 'file',
		params: {
			inspectionId: data.inspectionId
		}
	}).then(res => {
	  console.log(res);
	}).catch(err => {
	  console.error(err);
	}); 
	

	// return http.upload('api/upload/img', {
	//   files: [file], // 需要上传的文件列表
	//   name: 'file', // 文件对应的 key
	//   formData: {
	//     // 其他额外的 form data
	//   }
	// }).then(res => {
	//   console.log(res);
	// }).catch(err => {
	//   console.error(err);
	// });
	
	
} */

4.使用方法

methods:{
			async submit(){
				// 无参数get请求
				//const userInfo = await loginUser();
				//console.log("userInfo",userInfo)
				/**
				 * 默认账号:admin
				 * 默认密码:123
				 */
				// 模拟传递对象
				const obj = {
					account:"admin",
					password:"123"
				}
				// 调用get请求
				//const getResult = await LoginGetMethod(obj);
				//console.log("getResult",getResult);
								
				//param参数get请求
				const getParamsResult = await LoginGetParamsMethod(obj);
				console.log("getParamsResult",JSON.stringify(getParamsResult));
				
				// 调用post请求
				//const postResult = await LoginPostMethod(obj);
				//console.log("postResult",JSON.stringify(postResult));
				
				
				// Map<String, String>对象参数post请求
				//const postParamsResult = await LoginPostParamsMethod(obj);
				//console.log("postParamsResult",JSON.stringify(postParamsResult));
			},
          ******
          ******
            async jumpPage(data){// 跳转页面
				
				const res = await updatePassword(data);
				if(res.success){
					uni.navigateBack({
					  url: '/pages/my/my'
					});
				}else{
					uni.showToast({
						title: "修改失败",
						icon: "error"
					}) 
				}
			
				
				
			},
            ***
            ***
            submit(){
                 // 验证表单 (箭头函数异步方法)
				this.$refs.loginForm.validate().then(async res=>{

					console.log('验证通过',res);
					/**
					 * 默认账号:admin
					 * 默认密码:123
					 */
					// 调用/store/index.js 中logIn方法
					const result = await store.dispatch('logIn', res)
					//console.log("result结果",result);
					
					if(result.success){
						setTimeout(function() {
							uni.showToast({
								title: '登录成功',
							})
						}, 800);
						
						// 页面跳转
						uni.reLaunch({
						  url: '/pages/index/index'
						});
					}
					
					
				}).catch(err=>{
					console.log('表单数据错误信息:', err);
					/* uni.showToast({
						title:'登录失败',
						icon:'error',
					}) */
				});			
	
            },

}

5.后台代码(若依)

LoginController:

package com.ruoyi.api.login.controller;

import com.ruoyi.api.login.entity.User;
import com.ruoyi.api.login.response.ResponseData;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 移动端登录
 * */
@RestController
@RequestMapping("/api")
public class LoginController {

    /**
     * GET请求无参数
     * */
    @GetMapping("/loginUser.api")
    @ResponseBody
    public ResponseData getLoginUser(){
        System.out.println("无参数GET请求");
        User user = new User();

        user.setAccount("admin");
        user.setPassword("123");
        user.setToken("new_token");
        user.setMessage("请求成功");
        user.setSuccess(true);

        return ResponseData.success(user);
    }

    /**
     * GET请求
     * 返回字符串
     * */
    @GetMapping("/login.api")
    @ResponseBody
    public ResponseData getLogin(String account, String password){

        System.out.println("登录GET请求-------");
        System.out.println("账号--"+account);
        System.out.println("密码--"+password);


        if ("admin".equals(account) && "123".equals(password)){
            return ResponseData.success("get请求成功");
        }


        return ResponseData.error("get请求失败");
    }


    /**
     * GET请求-params参数
     * 返回字符串
     *
     * @ResponseBody
     * 将方法返回值直接响应给浏览器
     * 如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器
     * */
    @GetMapping("/paramsLogin.api")
    @ResponseBody
    public ResponseData getParamsLogin(@RequestParam(value = "acc") String account,
                                 @RequestParam(value = "psw") String password){

        System.out.println("登录GET请求params参数-------");
        System.out.println("账号--"+account);
        System.out.println("密码--"+password);


        if ("admin".equals(account) && "123".equals(password)){

            return ResponseData.success("GET请求params参数成功");
        }


        return ResponseData.error("GET请求params参数失败");
    }


    /**
     * POST请求
     * 返回对象
     *
     *  @ResponseBody
     *  将方法返回值直接响应给浏览器
     *  如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器
     * */
    @PostMapping("/login.api")
    public User postLogin(String account,String password){


        System.out.println("登录POST请求-------");
        System.out.println("账号--"+account);
        System.out.println("密码--"+password);

        // 创建模拟对象
        User user = new User();
        if ("admin".equals(account) && "123".equals(password)){
            user.setAccount(account);
            user.setPassword(password);
            user.setToken("new_token");
            user.setMessage("请求成功");
            user.setSuccess(true);

            return user;
        }

        user.setMessage("请求失败");
        user.setSuccess(false);

        return user;
    }




    /**
     * 前端传递过来的参数必须为对象
     * POST请求-Map<String, String>对象参数
     * 返回ResponseData对象
     * */
    @RequestMapping(value = "/paramsLogin.api",method = RequestMethod.POST)
    public ResponseData postParamsLogin(@RequestBody Map<String, String> body){

        System.out.println("body"+body);
        System.out.println("登录POST请求Map<String, String>对象参数-------");
        System.out.println("账号--"+body.get("account"));
        System.out.println("密码--"+body.get("password"));

        String acc = body.get("account");
        String psw = body.get("password");

        // 创建模拟对象
        User user = new User();
        if ("admin".equals(acc) && "123".equals(psw)){
            user.setAccount(acc);
            user.setPassword(psw);
            user.setToken("new_token");
            user.setMessage("Map对象参数请求成功");
            user.setSuccess(true);

            return ResponseData.success(user);
        }

        return ResponseData.error("postMap对象请求失败");
    }

    /**
     * 修改密码
     * POST请求-Map<String, String>对象参数
     * 返回ResponseData对象
     * */
    @PostMapping("/updatePassword.api")
    public ResponseData updatePassword(@RequestBody Map<String,String> body){

        System.out.println("修改密码POST请求Map<String, String>对象参数-------");
        System.out.println("body"+body);

        String oldPassword = body.get("oldPassword");
        System.out.println("oldPassword:"+oldPassword);

        String newPassword = body.get("newPassword");
        System.out.println("newPassword:"+newPassword);

        String confirmPassword = body.get("confirmPassword");
        System.out.println("confirmPassword:"+confirmPassword);

        // 创建模拟对象
        User user = new User();
        if("123".equals(oldPassword) && confirmPassword.equals(newPassword)){


            user.setPassword(newPassword);
            user.setToken("new_token");
            user.setMessage("Map对象参数请求成功");
            user.setSuccess(true);

            return ResponseData.success(newPassword);
        }


        return ResponseData.error("修改失败");
    }

}

User:

package com.ruoyi.api.login.entity;


import com.ruoyi.common.core.domain.BaseEntity;

public class User extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /** 编号 */
    private Long tableId;

    private String account;// 账号

    private String password;// 密码


    private String token;//token

    private String message;// 信息

    private Boolean success;// 是否成功


    public Long getTableId() {
        return tableId;
    }

    public void setTableId(Long tableId) {
        this.tableId = tableId;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }
}

响应对象

ErrorCodeEnum:

package com.ruoyi.api.login.response.enums;

public enum ErrorCodeEnum {

    NOT_LOGIN(301, "请登录"),
    PASS_LOGIN(301, "登录已超时,请重新登录");

    private Integer code;
    private String message;

    private ErrorCodeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return this.code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

ResponseData:

package com.ruoyi.api.login.response;

import com.ruoyi.api.login.response.enums.ErrorCodeEnum;

public class ResponseData {

    public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功";
    public static final String DEFAULT_ERROR_MESSAGE = "网络异常";
    public static final Integer DEFAULT_SUCCESS_CODE = 200;
    public static final Integer DEFAULT_ERROR_CODE = 500;
    private Boolean success;
    private Integer code;
    private String message;
    private Object data;

    public ResponseData() {
    }

    public ResponseData(Boolean success, Integer code, String message, Object data) {
        this.success = success;
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public static SuccessResponseData success() {
        return new SuccessResponseData();
    }

    public static SuccessResponseData success(Object object) {
        return new SuccessResponseData(object);
    }

    public static SuccessResponseData success(Integer code, String message, Object object) {
        return new SuccessResponseData(code, message, object);
    }

    public static ErrorResponseData error(String message) {
        return new ErrorResponseData(message);
    }

    public static ErrorResponseData error(Integer code, String message) {
        return new ErrorResponseData(code, message);
    }

    public static ErrorResponseData error(Integer code, String message, Object object) {
        return new ErrorResponseData(code, message, object);
    }

    public static ResponseData error(ErrorCodeEnum errorCodeEnum) {
        return error(errorCodeEnum.getCode(), errorCodeEnum.getMessage(), (Object)null);
    }

    public Boolean getSuccess() {
        return this.success;
    }

    public Integer getCode() {
        return this.code;
    }

    public String getMessage() {
        return this.message;
    }

    public Object getData() {
        return this.data;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof ResponseData)) {
            return false;
        } else {
            ResponseData other = (ResponseData)o;
            if (!other.canEqual(this)) {
                return false;
            } else {
                label59: {
                    Object this$success = this.getSuccess();
                    Object other$success = other.getSuccess();
                    if (this$success == null) {
                        if (other$success == null) {
                            break label59;
                        }
                    } else if (this$success.equals(other$success)) {
                        break label59;
                    }

                    return false;
                }

                Object this$code = this.getCode();
                Object other$code = other.getCode();
                if (this$code == null) {
                    if (other$code != null) {
                        return false;
                    }
                } else if (!this$code.equals(other$code)) {
                    return false;
                }

                Object this$message = this.getMessage();
                Object other$message = other.getMessage();
                if (this$message == null) {
                    if (other$message != null) {
                        return false;
                    }
                } else if (!this$message.equals(other$message)) {
                    return false;
                }

                Object this$data = this.getData();
                Object other$data = other.getData();
                if (this$data == null) {
                    if (other$data != null) {
                        return false;
                    }
                } else if (!this$data.equals(other$data)) {
                    return false;
                }

                return true;
            }
        }
    }

    protected boolean canEqual(Object other) {
        return other instanceof ResponseData;
    }

    public int hashCode() {
        boolean PRIME = true;
        int result = 1;
        Object $success = this.getSuccess();
        result = result * 59 + ($success == null ? 43 : $success.hashCode());
        Object $code = this.getCode();
        result = result * 59 + ($code == null ? 43 : $code.hashCode());
        Object $message = this.getMessage();
        result = result * 59 + ($message == null ? 43 : $message.hashCode());
        Object $data = this.getData();
        result = result * 59 + ($data == null ? 43 : $data.hashCode());
        return result;
    }

    public String toString() {
        Boolean var10000 = this.getSuccess();
        return "ResponseData(success=" + var10000 + ", code=" + this.getCode() + ", message=" + this.getMessage() + ", data=" + this.getData() + ")";
    }

}

ErrorResponseData:

package com.ruoyi.api.login.response;

public class ErrorResponseData extends ResponseData{

    private String exceptionClazz;

    public ErrorResponseData(String message) {
        super(false, ResponseData.DEFAULT_ERROR_CODE, message, (Object)null);
    }

    public ErrorResponseData(Integer code, String message) {
        super(false, code, message, (Object)null);
    }

    public ErrorResponseData(Integer code, String message, Object object) {
        super(false, code, message, object);
    }

    public String getExceptionClazz() {
        return this.exceptionClazz;
    }

    public void setExceptionClazz(String exceptionClazz) {
        this.exceptionClazz = exceptionClazz;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof ErrorResponseData)) {
            return false;
        } else {
            ErrorResponseData other = (ErrorResponseData)o;
            if (!other.canEqual(this)) {
                return false;
            } else {
                Object this$exceptionClazz = this.getExceptionClazz();
                Object other$exceptionClazz = other.getExceptionClazz();
                if (this$exceptionClazz == null) {
                    if (other$exceptionClazz != null) {
                        return false;
                    }
                } else if (!this$exceptionClazz.equals(other$exceptionClazz)) {
                    return false;
                }

                return true;
            }
        }
    }

    protected boolean canEqual(Object other) {
        return other instanceof ErrorResponseData;
    }

    public int hashCode() {
        boolean PRIME = true;
        int result = 1;
        Object $exceptionClazz = this.getExceptionClazz();
        result = result * 59 + ($exceptionClazz == null ? 43 : $exceptionClazz.hashCode());
        return result;
    }

    public String toString() {
        return "ErrorResponseData(exceptionClazz=" + this.getExceptionClazz() + ")";
    }

}

SuccessResponseData:

package com.ruoyi.api.login.response;

public class SuccessResponseData extends ResponseData{

    public SuccessResponseData() {
        super(true, DEFAULT_SUCCESS_CODE, "请求成功", (Object)null);
    }

    public SuccessResponseData(Object object) {
        super(true, DEFAULT_SUCCESS_CODE, "请求成功", object);
    }

    public SuccessResponseData(Integer code, String message, Object object) {
        super(true, code, message, object);
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/917394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

革新人脸图片智能修复

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月16日20点46分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…

OpenGL ES 文字渲染方式有几种?

在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。 实际上 OpenGL 并没有定义渲染文字的方式,所以我们最能想到的办法是:将带有文字的图像上传到纹理,然后进行纹理贴图。 本文分别介绍下在应用层和 C+…

Javaweb-day12(登录认证)

登录功能 登录校验&#xff08;重点&#xff09; 登录校验指的是在服务器接收到浏览器发送过来的请求之后&#xff0c;首先要对这个请求进行校验&#xff0c;先要校验一下用户登录了没有 怎么来实现登录校验的操作呢&#xff1f;具体的实现思路可以分为两部分&#xff1a; 在…

DBeaver中PostgreSQL数据库显示不全的解决方法

本文介绍在DBeaver中&#xff0c;连接PostgreSQL后&#xff0c;数据库显示不全的解决方法。 最近&#xff0c;在DBeaver中连接了本地的PostgreSQL数据库。但是连接后打开这个数据库时发现&#xff0c;其所显示的Databases不全。如下图所示&#xff0c;Databases只显示了一个pos…

计算机视觉 1-8章 (硕士)

文章目录 零、前言1.先行课程&#xff1a;python、深度学习、数字图像处理2.查文献3.环境安装 第一章&#xff1a;概论1.计算机视觉的概念2.机器学习 第二章&#xff1a;图像处理相关基础1.图像的概念2.图像处理3.滤波器4.卷积神经网络CNN5.图像的多层表示&#xff1a;图像金字…

如何使用EasyExcel生成多列表组合填充的复杂Excel示例

作者&#xff1a;Funky_oaNiu 一、&#xff08;需求&#xff09;生成的表格效果&#xff1a;二、搞一个模板文件三、建立对应的表格实体类四、开始填充五、Vue3前端发起请求下载六、官方文档及AI问答 一、&#xff08;需求&#xff09;生成的表格效果&#xff1a; 其中只有顶部…

手机ip地址异常怎么解决

在现代社会中&#xff0c;手机已成为我们日常生活中不可或缺的一部分&#xff0c;无论是工作、学习还是娱乐&#xff0c;都离不开网络的支持。然而&#xff0c;有时我们会遇到手机IP地址异常的问题&#xff0c;这不仅会影响我们的网络体验&#xff0c;还可能带来安全隐患。本文…

Python酷库之旅-第三方库Pandas(218)

目录 一、用法精讲 1021、pandas.DatetimeIndex.inferred_freq属性 1021-1、语法 1021-2、参数 1021-3、功能 1021-4、返回值 1021-5、说明 1021-6、用法 1021-6-1、数据准备 1021-6-2、代码示例 1021-6-3、结果输出 1022、pandas.DatetimeIndex.indexer_at_time方…

基于 CentOS7.6 的 Docker 下载常用的容器(MySQLRedisMongoDB),解决拉取容器镜像失败问题

安装MySQL&Redis&MongoDB mysql选择是8版本&#xff0c;redis是选择4版本、mongoDB选择最新版&#xff0c;也可以根据自己的需要进行下载对应的版本&#xff0c;无非就是容器名:版本号 这样去拉去相关的容器镜像。如果你还不会在服务器中安装 docker&#xff0c;可以查…

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面&#xff0c;讯飞和腾讯云等都是优秀的选择&#xff0c;但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言&#xff0c;以下是对各个平台的详细比较&#xff1a; 一、讯飞语音合成介绍 与语音听写相反&#xff0c;语音合成是将一段…

设计模式之责任链模式(Chain Of Responsibility)

一、责任链模式介绍 1、责任链模式介绍 职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在 一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链 传递请求&#xff0c;直到有一个对…

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西&#xff0c;主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数&#xff08;或 alloca&#xff09;分配的是栈内存&#xff0c;它的特点是&#xff1a; 生命周…

更改liunx的磁盘名称

目录 1. 问题的提出 2. 机器环境说明 3. 解决方法 1. 问题的提出 今天在Linux上部署软件&#xff0c;发现要部署软件的硬盘名称带中文&#xff0c;当访问该磁盘时&#xff0c;中文则被转为长长的一串数字字符串&#xff0c;这很不方便&#xff0c;于是需要将带有中文的磁盘名…

基于Python 和 pyecharts 制作招聘数据可视化分析大屏

在本教程中&#xff0c;我们将展示如何使用 Python 和 pyecharts 库&#xff0c;通过对招聘数据的分析&#xff0c;制作一个交互式的招聘数据分析大屏。此大屏将通过不同类型的图表&#xff08;如柱状图、饼图、词云图等&#xff09;展示招聘行业、职位要求、薪资分布等信息。 …

论文PDF页面无法下载PDF

问题&#xff1a;通常在下载学术论文时&#xff0c;网页命名是PDF页面&#xff0c;但是无法下载PDF&#xff0c;下载的是html网页 解决&#xff1a; mac&#xff1a;按F12打开开发者界面 然后点击源代码/来源选项 然后打开下图所在位置&#xff0c;鼠标右键复制链接&#xff…

Ubuntu24 上安装搜狗输入法

link 首先在终端中依次输入以下代码 sudo apt update sudo apt install fcitx 找到语言支持 在终端中依次输入 sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/ sudo apt purge ibus 进入网页 搜狗输入法linux-首页​ shurufa.sogou.com/linux 找到刚才下…

从0开始机器学习--Day27--主成分分析方法

主成分分析方法(Principal components analysis) 在降维算法中&#xff0c;比较普遍的是使用主成分分析方法&#xff08;PCA&#xff09; PCA算法简单示例 如图&#xff0c;假设我们有一个二维的特征&#xff0c;想要将其降为一维&#xff0c;简单的方法是寻找一条直线&#…

深度学习中的mAP

在深度学习中&#xff0c;mAP是指平均精度均值(mean Average Precision)&#xff0c;它是深度学习中评价模型好坏的一种指标(metric)&#xff0c;特别是在目标检测中。 精确率和召回率的概念&#xff1a; (1).精确率(Precision)&#xff1a;预测阳性结果中实际正确的比例(TP / …

【实验11】卷积神经网络(2)-基于LeNet实现手写体数字识别

&#x1f449;&#x1f3fc;目录&#x1f448;&#x1f3fc; &#x1f352;1. 数据 1.1 准备数据 1.2 数据预处理 &#x1f352;2. 模型构建 2.1 模型测试 2.2 测试网络运算速度 2.3 输出模型参数量 2.4 输出模型计算量 &#x1f352;3. 模型训练 &#x1f352;4.模…

Springboot3.3.5 启动流程之 tomcat启动流程介绍

在文章 Springboot3.3.5 启动流程&#xff08;源码分析&#xff09; 中讲到 应用上下文&#xff08;applicationContext&#xff09;刷新(refresh)时使用模板方法 onRefresh 创建了 Web Server. 本文将详细介绍 ServletWebServer — Embedded tomcat 的启动流程。 首先&…