Django_Vue3_ElementUI_Release_003_前端Vue3项目初始化

1. 概念扫盲

  1. Node.js是基于ChromeV8引擎,让JS在服务端运行的开发平台,就是JS的一种解释器
  2. WebPack就是模块打包机,把浏览器不能直接运行的拓展语言找到并打包为合适的格式给浏览器直接使用
  3. Vue基于WebPack构件项目的,并带有合理默认配置的,可以快速开发的完整系统
  4. npm就是JS的包管理工具

2. 环境准备

2.1 nodejs下载安装及配置

nodejs download

在这里插入图片描述

2.2 安装Vue脚手架

npm install -g @vue/cli

在这里插入图片描述

2.3 创建Vue3项目并运行

cd E:\project2024\shopping_carvue create shopping_car_forecd shopping_car_forenpm run serve

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

2.4 安装相关包

在这里插入图片描述

2.5 vue开发者必备vscode插件【2024最新】

在这里插入图片描述

https://blog.csdn.net/liyananweb/article/details/135958361

3. 一个小demo

3.1 public文件夹css,js等文件

在这里插入图片描述

3.2 index.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><!-- Favicon and Touch Icons--><link rel="shortcut icon" href="xxyy.ico"/><link rel="stylesheet" href="bootstrap.css"><title>数据平台</title></head><body><div id="app"></div><!-- Javascript Files --><script src="jquery-3.3.1.js"></script><script src="bootstrap.js"></script></body>
</html>

3.3 配置main.js

// 导入Vue
import { createApp } from 'vue'
// 导入Vue扩展插件
import axios from 'axios'
import VueAxios from 'vue-axios'
import { createRouter, createWebHistory } from 'vue-router'
// 导入组件
import App from './App.vue'
// import Product from './components/Product.vue'
import Signin from './components/Signin.vue'// 定义路由
const routes = [{ path: '/', component: Signin },// { path: '/product', component: Product },
]
// 创建路由对象
const router = createRouter({// 设置历史记录模式history: createWebHistory(),// routes: routes的缩写routes,
})
// 创建Vue对象
const app = createApp(App)
// 将路由对象绑定到Vue对象
app.use(router)
// 将vue-axios与axios关联并绑定到Vue对象
app.use(VueAxios,axios)
// 挂载使用Vue对象
app.mount('#app')

3.4 app.vue

<template><div id="app"><router-view/></div>
</template><script>
export default {name: 'App'
}
</script>

3.5 Signin.vue

<template><div class="main-layout card-bg-1"><div class="container d-flex flex-column"><div class="row no-gutters text-center align-items-center justify-content-center min-vh-100"><div class="col-12 col-md-6 col-lg-5 col-xl-4"><h1 class="font-weight-bold">用户登录</h1><p class="text-dark mb-3">民主、文明、和谐、自由、平等</p><div class="mb-3"><div class="form-group"><label for="username" class="sr-only">账号</label><input type="text" class="form-control form-control-md" id="username" placeholder="请输入账号"v-model="username"></div><div class="form-group"><label for="password" class="sr-only">密码</label><input type="password" class="form-control form-control-md" id="password"placeholder="请输入密码" v-model="password"></div><button class="btn btn-primary btn-lg btn-block text-uppercase font-weight-semibold" type="submit"@click="login()">登录</button></div></div></div></div></div>
</template><script>
export default {name: 'Signin',data () {return {username: '',password: ''}},methods: {login: function () {// 判断是否输入账号if (this.username.length > 0 && this.password.length > 0) {// 向后端发送POST请求let data = new FormData();data.append('username',this.username);data.append('password',this.password);this.axios.post('http://127.0.0.1:8000/', data).then((res)=> {// POST请求发送成功则获取响应结果的result// 如果result为true,则说明存在此用户if (res.data.result) {// 将访问路由chat,并设置参数this.$router.push({path: '/product'})} else {// 当前用户不存在后端的数据库window.alert('账号不存在或异常')// 清空用户输入的账号和密码this.username = ''this.password = ''}}).catch(function () {// PSOT请求发送失败window.alert('账号获取失败')// 清空用户输入的账号和密码this.username = ''this.password = ''})} else {// 提示没有输入账号或密码window.alert('请输入账号或密码')}}}
}
</script><style scoped>.text-center {text-align: center!important;}.min-vh-100 {min-height: 100vh!important;}.align-items-center {align-items: center!important;}.justify-content-center {justify-content: center!important;}.no-gutters {margin-right: 0;margin-left: 0;}.row {display: flex;flex-wrap: wrap;margin-right: -15px;margin-left: -15px;}*, :after, :before {box-sizing: border-box;}
</style>

3.6 如碰到报错

error Component name “index” should always be multi-word vue/multi-word-component-names

解决方案
其一、在项目的根目录找到vue.config.js文件,没有就新创建;
其二、需要添加的代码为:
在这里插入图片描述

3.7 运行效果

在这里插入图片描述

3.8 总结vue运行原理

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

4. 正式开始项目

4.1 创建Vue3项目并运行

cd E:\project2024\shopping_carvue create shopping_car_forecd shopping_car_forenpm run serve

4.2配置vue.config.js

const path = require('path')
module.exports = {publicPath: '/',outputDir: 'dist',assetsDir: 'static',productionSourceMap: false,devServer: {hot: true,port: 8010,open: true,proxy: {'/': {target: 'http://127.0.0.1:8000/',changeOrigin: true,pathRewrite: { '^/': '' },},},},configureWebpack: {name: 'system',resolve: {alias: {"~@": __dirname,"@": path.resolve(__dirname, "./src")}}},
}

4.3 public文件夹中放入文件:css,js,img,layui

在这里插入图片描述

4.4 src文件夹中创建项目文件夹

axios:配置vue-axios
router:配置和定义Vue的路由信息
store:配置vuex,实现vue状态管理
sytle.css:编写异常页面的样式,仅在异常页面使用,因此不能放在public的css文件夹
在这里插入图片描述

4.4 配置Axios和Vuex

4.4.1 安装

npm i axios vue-axios

4.4.2 axios中创建index.js

import axios from 'axios'axios.defaults.baseURL = '/'  //设置HTTP请求地址
axios.defaults.headers.post["Content-Type"] = 'application/json' //设置POST请求的数据类型
axios.defaults.timeout = 60000 //设置HTTP请求超时,单位是毫秒
axios.defaults.withCredentials = true; //默认false,代表跨域请求不提供凭据export default axios

在这里插入图片描述

4.5 实现vue数据持久化

4.5.1 安装

npm i vuex vuex-persistedstate

在这里插入图片描述

4.5.2 store中创建index.js

在这里插入图片描述

import {createStore} from 'vuex'  //从Vuex导入函数createStore并实例化生成store对象
import createPersistedState from "vuex-persistedstate";const store = createStore({state: {  //设置Vuex需要保存的数据lookImgUrl: 'http://127.0.0.1:8000',username: '',last_login: ''},mutations: {  //修改参数state的数据,并且只能同步执行setUserName(state, username){state.username = username},setLastLogin(state, last_login){state.last_login = last_login},},actions: {}, // 解决参数mutations无法执行的异步问题modules: {}, // 用于模块化处理// 所有数据缓存到本地plugins: [createPersistedState()], //用于为Vuex引入插件
})
export default store

4.6 编写路由

4.6.1 安装vue-router

npm i vue-router

在这里插入图片描述

4.6.2 编写router/index.js

在这里插入图片描述

import {createRouter, createWebHashHistory} from 'vue-router'
// import Home from '../components/Home.vue'
// import Commodity from '../components/Commodity.vue'
// import Detail from '../components/Detail.vue'
// import Shopper from '../components/Shopper.vue'
import Login from '../components/Login.vue'
// import Shopcart from '../components/Shopcart.vue'
// import Error from '../components/Error.vue'// 定义路由
const routes = [// {path: '/', component: Home, meta: {title: '首页'}},// {path: '/commodity', component: Commodity, meta: {title: '商品列表页'}},// // :id是设置路由变量// {path: '/commodity/detail/:id', component: Detail, meta: {title: '商品详细页'}},// {path: '/shopper', component: Shopper, meta: {title: '个人中心页'}},{path: '/shopper/login', component: Login, meta: {title: '用户登录页'}},// {path: '/shopper/shopcart', component: Shopcart, meta: {title: '我的购物车'}},// // 路由匹配// {path: '/:pathMatch(.*)*', component: Error, meta: {title: '页面丢失'}},
]// 创建路由对象
const router = createRouter({// 设置历史记录模式history: createWebHashHistory(),// routes: routes的缩写routes,
})
export default router

4.7 编写组件

4.7.1 基础组件base.vue

<template><div class="header"><div class="headerLayout w1200"><div class="headerCon"><h1 class="mallLogo"><a href="/" title="首页"><img src="img/logo.png"></a></h1><div class="mallSearch"><div class="layui-form"><input type="text" v-model="search" required lay-verify="required" autocomplete="off"class="layui-input"placeholder="请输入需要的商品"><button class="layui-btn" lay-submit lay-filter="formDemo" @click="mySearch"><i class="layui-icon layui-icon-search"></i></button></div></div></div></div></div><div class="content content-nav-base" :class="activation"><div class="main-nav"><div class="inner-cont0"><div class="inner-cont1 w1200"><div class="inner-cont2"><router-link :to="`/`" :class="activation == '' ?'active':''">首页</router-link><router-link :to="`/commodity`" :class="activation == 'commodity' ?'active':''">所有商品</router-link><router-link :to="`/shopper/shopcart`" :class="activation == 'shopcart' ?'active':''">购物车</router-link><router-link :to="`/shopper`" :class="activation == 'shopper' ?'active':''">个人中心</router-link></div></div></div></div></div>
</template><script>export default {data() {return {search: ''}},props: {activation: {type: String,default: ''},},methods: {// 搜索商品mySearch: function () {this.$router.push({path: '/commodity', query: {search: this.search, page: 1}})},}}
</script><style scoped></style>

4.7.2 底边栏footer.vue

<template><div class="footer"><div class="ng-promise-box"><div class="ng-promise w1200"><p class="text"><a class="icon1" href="javascript:;">7天无理由退换货</a><a class="icon2" href="javascript:;">满99元全场免邮</a><a class="icon3" style="margin-right: 0" href="javascript:;">100%品质保证</a></p></div></div><div class="mod_help w1200"><p><a href="javascript:;">关于我们</a><span>|</span><a href="javascript:;">帮助中心</a><span>|</span><a href="javascript:;">售后服务</a><span>|</span><a href="javascript:;">母婴资讯</a><span>|</span><a href="javascript:;">关于货源</a></p></div></div>
</template><script>export default {name: "Footer"}
</script><style scoped></style>

4.8 实例化vue对象main.js

import { createApp } from 'vue'
import VueAxios from 'vue-axios'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from './axios'
import base from './components/Base'
import footer from './components/Footer'// 创建Vue对象
const app = createApp(App)
// 注册组件
app.component('base-page', base)
app.component('footer-page', footer)
// 将路由对象绑定到Vue对象
app.use(router)
app.use(store)
// 将vue-axios与axios关联并绑定到Vue对象
app.use(VueAxios, axios)
// 挂载使用Vue对象
app.mount('#app')

4.9 根组件app.vue

<template><div id="app"><router-view/></div>
</template><script>
export default {name: 'App'
}
</script>

4.10 默认首页index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head><title>母婴商城</title><link rel="stylesheet" type="text/css" href="<%= BASE_URL %>css/main.css"><link rel="icon" href="<%= BASE_URL %>favicon.ico"><link rel="stylesheet" type="text/css" href="<%= BASE_URL %>layui/css/layui.css"><script type="text/javascript" src="<%= BASE_URL %>layui/layui.js"></script>
</head>
<body><div id="app"></div></body>
</html>

4.11 业务组件

4.11.1 用户注册和登陆页面,login.vue

<template><base-page :activation="activation"></base-page><div class="login-bg"><div class="login-cont w1200"><div class="form-box"><div class="layui-form"><legend>手机号注册登录</legend><div class="layui-form-item"><div class="layui-inline iphone"><div class="layui-input-inline"><i class="layui-icon layui-icon-cellphone iphone-icon"></i><input name="username" id="username" v-model="username"lay-verify="required|phone" placeholder="请输入手机号"class="layui-input"></div></div><div class="layui-inline iphone"><div class="layui-input-inline"><i class="layui-icon layui-icon-password iphone-icon"></i><input id="password" type="password" v-model="password"name="password" lay-verify="required|password"placeholder="请输入密码" class="layui-input"></div></div></div><p>{{ msg }}</p><div class="layui-form-item login-btn"><div class="layui-input-block"><button class="layui-btn" lay-submit="" @click="loginAndRegister">注册/登录</button></div></div></div></div></div></div><footer-page></footer-page>
</template><script>export default {name: "Login",data() {return {activation: "login",msg: "",username: "",password: ""}},methods: {loginAndRegister: function () {console.log(this.username)console.log(this.password)this.axios.post('/api/v1/index/login/', {username: this.username, password: this.password}).then(response => {this.msg = response.data.msgif (response.data.state === 'success') {// 登录成功跳转个人主页this.$store.commit('setUserName',this.username)this.$store.commit('setLastLogin',response.data.last_login)console.log(this.state)this.$router.push({path: '/shopper'})}}).catch(function (error) {console.log(error)})}}}
</script><style scoped></style>

4.11.2 用户详情页面,shopper.vue

<template><base-page :activation="activation"></base-page><div class="info-list-box"><div class="info-list"><div class="item-box layui-clear"><div class="item"><div class="img"><img src="img/portrait.png"></div><div class="text"><h4>用户:{{ username }}</h4><p class="data">登录时间:{{ last_login }}</p><div class="left-nav"><div class="title"><router-link :to="`/shopper/shopcart`">我的购物车</router-link></div><div class="title" @click="logout"><a>退出登录</a></div></div></div></div><div class="item1"><div class="cart"><div class="cart-table-th"><div class="th th-items"><div class="th-inner">订单编号</div></div><div class="th th-price"><div class="th-inner">订单价格</div></div><div class="th th-amount"><div class="th-inner">购买时间</div></div><div class="th th-sum"><div class="th-inner">订单状态</div></div></div><div class="OrderList"><div class="order-content" id="list-cont"><ul class="item-contents layui-clear" v-for="(o, key) in orders" :key="key"><li class="th th-items">{{ o.id }}</li><li class="th th-price">¥{{ o.price }}</li><li class="th th-amount">{{ o.created }}</li><li class="th th-sum">{{ o.state }}</li></ul></div></div></div></div></div></div><div style="text-align: center;"><div class="layui-box layui-laypage layui-laypage-default" id="layui-laypage-1"><a href="javascript:;" class="layui-laypage-prev">上一页</a><a href="javascript:;">1</a><span class="layui-laypage-curr"><em class="layui-laypage-em"></em><em>2</em></span><a href="javascript:;">3</a><a href="javascript:;" class="layui-laypage-next">下一页</a></div></div></div>
</template><script>export default {name: "Shopper",data() {return {activation: 'shopper',orders: [{}],username: this.$store.state.username,last_login: this.$store.state.last_login,}},mounted: function () {if (this.$store.state.username === '') {this.$router.push({path: '/shopper/login'})}this.getcode(); //页面加载时自动执行},methods: {getcode: function () {var url = '/api/v1/shopper/home/'var href = window.location.href.split('?')[1]var t = new URLSearchParams('?' + href).get('t')if (t !== null){url += '?t=' + t}console.log(url)this.axios.get(url).then(response => {this.orders = response.data.data.ordersif (typeof(this.orders) == "undefined") {this.orders = [{}]}console.log(this.orders)}).catch(function (error) {console.log(error)})},logout: function () {this.axios.post('/api/v1/shopper/logout/').then(response => {if (response.data.state === 'success') {// 退出登录跳转个人主页this.$store.commit('setUserName','')this.$store.commit('setLastLogin','')console.log(this.state)this.$router.push({path: '/'})}}).catch(function (error) {console.log(error)})}},}</script><style scoped></style>

4.11.3 报错页面,error.vue

<template><nav><div class="menu"><p class="website_name">母婴商城</p></div>
</nav>
<div class="wrapper"><div class="container"><div id="scene" class="scene" data-hover-only="false"><div class="circle" data-depth="1.2"></div><div class="one" data-depth="0.9"><div class="content"><span class="piece"></span><span class="piece"></span><span class="piece"></span></div></div><div class="two" data-depth="0.60"><div class="content"><span class="piece"></span><span class="piece"></span><span class="piece"></span></div></div><div class="three" data-depth="0.40"><div class="content"><span class="piece"></span><span class="piece"></span><span class="piece"></span></div></div><p class="p404" data-depth="0.50">404</p><p class="p404" data-depth="0.10">404</p></div><div class="text"><article><button><router-link :to="`/`">返回首页</router-link></button></article></div></div>
</div>
</template><script>export default {name: "Error"}
</script><style src="@/assets/style.css" scoped>
</style>

4.12 测试页面

4.12.1 测试链接

http://localhost:8010/#/shopper/login

5. 常见报错

5.1 如果后台一直报错

“GET /ws HTTP/1.1”

则修改vue.config.js
在这里插入图片描述

5.2 后台接收不到数据

前端是这样的形式
在这里插入图片描述
报错要改成绿色方框的内容
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】TCP/IP 五层网络模型:网络层

最核心的就是 IP 协议&#xff0c;是一个相当复杂的协议 TCP 详细展开讲解&#xff0c;是因为 TCP 确实在开发中非常关键&#xff0c;经常用到&#xff0c;IP 则不同&#xff0c;和普通程序猿联系比较浅。和专门开发网络的程序猿联系比较紧密&#xff08;开发路由器&#xff0…

2022高教社杯全国大学生数学建模竞赛C题 问题一(2) Python代码演示

目录 1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律数据预处理绘图热力图相关系数图百分比条形图箱线图小提琴图直方图KED图描述性统计分析偏度系数峰度系数其它统计量1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律 数据预处理 …

使用java程序生成具有3D效果的图片

程序功能 图像初始化&#xff1a;创建一个800x800像素的 BufferedImage 对象&#xff0c;并使用 Graphics2D 进行绘图操作。 光照效果&#xff1a;使用 RadialGradientPaint 实现径向渐变效果&#xff0c;模拟从图片中心向外扩散的光照&#xff0c;使图片有深度感&#xff0c;…

Maven 解析:打造高效、可靠的软件工程

Apache Maven【简称maven】 是一个用于 Java 项目的构建自动化工具&#xff0c; 通过提供一组规则来管理项目的构建、依赖关系和文档。 1.Pre-预备知识&#xff1a; 1.1.Maven是什么&#xff1f; [by Maven是什么&#xff1f;有什么作用&#xff1f;Maven的核心内容简述_ma…

【数据结构与算法 | 灵神题单 | 自顶向下DFS篇】力扣1022,623

1. 力扣1022&#xff1a;从根到叶的二进制之和 1.1 题目&#xff1a; 给出一棵二叉树&#xff0c;其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 例如&#xff0c;如果路径为 0 -> 1 -> 1 -> 0 -> 1&#xff0c;那…

通过sshd_config限制用户登录

在CentOS Stream或其他现代的Linux发行版中&#xff0c;你可能会发现传统的hosts.deny和 hosts.allow文件已经不存在或不被使用。这是因为随着时间的推移&#xff0c;系统的安全策略和网络管理工具已经发生了演变&#xff0c;许多系统管理员和发行版维护者选择使用更现代、更灵…

Mac 上,终端如何开启 proxy

前提 确保你的浏览器可以访问 google&#xff0c;就是得先有这个能力 步骤 查看网络的 http/https 还有 socks5 的 port配置 .zshrc 查看 port 点击 wifi 设置 以我的为例&#xff0c;我的 http/https 都是 7890&#xff0c; socks5 是 7891 查看代理的port 以我的软件…

Ubuntu24.04部署docker

1、更新软件 apt update 2、安装curl apt install apt-transport-https curl 3、导入阿里云GPG秘钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 4、添加Docker阿里云仓库到Ubuntu 24.04的…

Latex2024 下载安装运行HelloWorld—全流程笔记

LaTex安装教程&#x1f680; 这是读博之后写的第一篇文章&#xff0c;来到新课题组之后&#xff0c;新课题组主要是用Latex&#xff0c;在之前的课题组&#xff0c;还是比较常用world&#xff0c;所以就研究了一下Latex的下载和安装&#xff0c;还有配置以及卸载&#xff0c;虽…

什么是Bean的循环依赖?解决方案是什么?

Spring Bean循环依赖以及解决方案&#xff1a; 什么是Bean的循环依赖? A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你&#xff0c;你也依赖我。 如图所示&#xff0c;Father类中有Son属性的成员变量&#xff0c;Son类中有Father属性的成员变量。这就是循环依赖…

集群聊天服务器项目【C++】(六)MySql数据库

前面已经介绍了网络模块和业务模块&#xff0c;本章介绍数据模块&#xff0c;同样保持模块解耦的特性&#xff0c;即业务模块不能出现数据模块内容&#xff0c;如出现SQL语句&#xff0c;接下来看看怎么实现的。 1.环境安装 第一章已经介绍了MySql安装&#xff0c;但注意需要…

re题(24)BUUFCTF-[WUSTCTF2020]level1

BUUCTF在线评测 (buuoj.cn) 放到ida 这是下载的文本 逻辑比较简单&#xff0c;写个脚本 p[198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000] for i in range(1,20):if (i & 1) ! 0 :p[i-1]chr(p[i-1] >> i)…

NVM(node.js版本工具)的使用

1.nvm是什么 NVM 是 Node Version Manager 的缩写&#xff0c;它是一个用于管理 Node.js 版本的命令行工具。通过NVM&#xff0c;你可以在同一台机器上安装和切换多个 Node.js 版本&#xff0c;对于开发和测试在不同 Node.js 版本上运行的应用程序非常有用。 2.下载 下载之前…

Linux:vim编辑技巧

命令模式 光标跳转 输入18&#xff0c;再输入G&#xff0c;可以跳转到18行。 复制、粘贴、删除 P是往上一行粘贴 小写u可以撤销 查找/撤销/保存 大写U可能失效&#xff0c;用CTRLr 末行模式 保存/退出/文件操作 字符串替换 开关参数的控制

AJAX 入门 day3

目录 1.XMLHttpRequest 1.1 XMLHttpRequest认识 1.2 用ajax发送请求 1.3 案例 1.4 XMLHttpRequest - 查询参数 1.5 XMLHttpRequest - 数据提交 2.Promise 2.1 Promise认识 2.2 Promise - 三种状态 2.3 案例 3.封装简易版 axios 3.1 封装_简易axios_获取省份列表 3…

FloodFill算法【下】

417. 太平洋大西洋水流问题 题目链接&#xff1a;417. 太平洋大西洋水流问题 题目解析 题目给我们一个矩阵&#xff0c;这个矩阵相当于陆地&#xff0c;被两个洋包围&#xff0c;左和上代表太平洋&#xff0c;右和下代表大西洋。 矩阵里面的数字代表海拔&#xff0c;水可以…

【磨皮美白】基于Matlab的人像磨皮美白处理算法,Matlab处理

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Matlab的图像磨皮美白处理&#xff0c;用matlab实现。 一、案例背景和算法介绍 …

【C++】【网络】【Linux系统编程】单例模式,加锁封装TCP/IP协议套接字

目录 引言 获取套接字 绑定套接字 表明允许监听 单例模式设计 完整代码示例 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 有关套接字编程的细节和更多的系统调用课参考《UNIX环境高级编程》一书&#xff0c;可以在如下网站搜索电子版&#xff0c;该书在第16章详…

杨氏矩阵中查找想要找到的数

文章目录 一、题目二、思路三、代码实现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 二、思路 第一步 根据杨氏矩阵的规则说明矩阵从左到右递增&#xff0c;从上往下递增&#xff0c;因此我们可以画出这样的图。 对于杨氏矩阵&#xff0…

FPGA与Matlab图像处理之直方图均衡化

文章目录 一、什么是直方图?二、什么是直方图均衡化&#xff1f;三、Matlab实现直方图均衡化的步骤第一步&#xff1a; 彩色图像转成灰度图像第二步&#xff1a;提取亮度通道的直方图第三步&#xff1a;累计亮度通道的像素值频率第四步&#xff1a; 映射到新的灰度值 四、Veri…