Vue 3 路由配置使用与讲解
在现代前端开发中,单页应用(SPA)已成为主流趋势,Vue.js 作为一款优秀的 JavaScript 框架,在构建 SPA 方面表现出色。Vue Router 作为 Vue.js 官方的路由管理器,与 Vue.js 核心深度集成,极大地简化了单页应用的路由管理工作。在 Vue 3 中,Vue Router 也进行了升级,带来了新特性与改进,本文将全面深入地介绍 Vue 3 中路由的配置和使用。
一、安装和基础设置
(一)安装 Vue Router
首先,确保你的项目已经初始化好 Vue 3 环境。若尚未安装vue-router,可以通过 npm 或 yarn 进行安装,以 npm 为例,安装命令如下:
npm install vue-router@4
这里指定安装@4版本,是因为 Vue 3 搭配的是 Vue Router 4,它在功能和使用方式上与之前版本有所不同。
(二)创建路由实例
安装完成后,通常在项目的src目录下创建一个router文件夹,在其中新建index.js文件用于配置路由实例。代码示例如下:
// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router'
// 导入路由对应的组件
import Home from '../views/Home.vue'
import About from '../views/About.vue'const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
]const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes
})export default router
上述代码中,createRouter用于创建路由实例,createWebHistory则用于启用 HTML5 History 模式,该模式下 URL 更加美观,没有#符号,但需要服务器进行相应配置,否则刷新页面可能出现 404 错误。若不想配置服务器,也可使用createWebHashHistory模式,即 Hash 模式,URL 会带有#符号,兼容性更好。routes数组定义了路由的映射关系,每个对象包含path(路径)、name(路由名称,方便通过名称进行导航)和component(路径对应的组件)。
(三)在 Vue 应用中使用路由
在main.js文件中引入并使用上述创建好的路由实例,代码如下:
// src/main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'createApp(App).use(router).mount('#app')
通过app.use(router)将路由实例挂载到 Vue 应用中,这样整个应用就具备了路由功能。同时,在根组件App.vue中,需要使用<router - view>标签作为路由出口,用来渲染匹配到的组件。例如:
<template><div id="app"><router - view></router - view></div>
</template>
二、路由配置详解
(一)路由模式
Vue Router 4 支持两种主要的路由模式:Hash 模式和 History 模式。
- Hash 模式:使用 URL 的 hash(即#号后面的部分)来模拟一个完整的 URL,当#号后面的内容发生变化时,不会向服务器发送请求。这种模式兼容性好,在一些不支持 HTML5 History API 的老旧浏览器中也能正常使用。配置方式如下:
const router = createRouter({history: createWebHashHistory(),routes: [...] })
-
History 模式:利用 HTML5 History API 来实现 URL 的变化,通过pushState和replaceState方法改变浏览器地址栏的 URL,同时不会重新加载页面。这种模式下的 URL 更加简洁美观,符合现代 Web 应用的需求,但如前文所述,需要服务器进行配置,确保所有路径都能正确回退到index.html。配置代码如下:
const router = createRouter({history: createWebHistory(),routes: [...] })
(二)路由匹配
- 动态路由匹配:在实际应用中,经常需要根据不同的参数来展示不同的内容,这时就可以使用动态路由匹配。例如,要创建一个用户详情页面,每个用户有唯一的 ID,通过 ID 来展示对应用户的信息。定义动态路由的方式如下:
// src/router/index.js import { createRouter, createWebHistory } from 'vue-router' // 导入路由对应的组件 import Home from '../views/Home.vue' import About from '../views/About.vue'const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About} ]const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes })export default router
上述代码中,createRouter用于创建路由实例,createWebHistory则用于启用 HTML5 History 模式,该模式下 URL 更加美观,没有#符号,但需要服务器进行相应配置,否则刷新页面可能出现 404 错误。若不想配置服务器,也可使用createWebHashHistory模式,即 Hash 模式,URL 会带有#符号,兼容性更好。routes数组定义了路由的映射关系,每个对象包含path(路径)、name(路由名称,方便通过名称进行导航)和component(路径对应的组件)。
(三)在 Vue 应用中使用路由
在main.js文件中引入并使用上述创建好的路由实例,代码如下:
// src/main.js import { createApp } from 'vue' import App from './App.vue' import router from './router'createApp(App).use(router).mount('#app')
通过app.use(router)将路由实例挂载到 Vue 应用中,这样整个应用就具备了路由功能。同时,在根组件App.vue中,需要使用<router - view>标签作为路由出口,用来渲染匹配到的组件。例如:
<template><div id="app"><router - view></router - view></div> </template>
二、路由配置详解
(一)路由模式
Vue Router 4 支持两种主要的路由模式:Hash 模式和 History 模式。
- Hash 模式:使用 URL 的 hash(即#号后面的部分)来模拟一个完整的 URL,当#号后面的内容发生变化时,不会向服务器发送请求。这种模式兼容性好,在一些不支持 HTML5 History API 的老旧浏览器中也能正常使用。配置方式如下:
const router = createRouter({history: createWebHashHistory(),routes: [...] })
History 模式:利用 HTML5 History API 来实现 URL 的变化,通过pushState和replaceState方法改变浏览器地址栏的 URL,同时不会重新加载页面。这种模式下的 URL 更加简洁美观,符合现代 Web 应用的需求,但如前文所述,需要服务器进行配置,确保所有路径都能正确回退到index.html。配置代码如下:
const router = createRouter({history: createWebHistory(),routes: [...] })
(二)路由匹配
- 动态路由匹配:在实际应用中,经常需要根据不同的参数来展示不同的内容,这时就可以使用动态路由匹配。例如,要创建一个用户详情页面,每个用户有唯一的 ID,通过 ID 来展示对应用户的信息。定义动态路由的方式如下:
const routes = [{path: '/user/:id',component: User} ]
在User组件中,可以通过$route.params.id来访问这个动态参数id。例如,在User组件的setup函数中获取参数:
import { useRoute } from 'vue - router' export default {setup() {const route = useRoute()const userId = route.params.id// 可以根据userId进行数据请求等操作return {userId}} }
路由参数的可选性:有时候,某个动态参数可能是可选的。例如,我们有一个商品详情页面,除了商品 ID 外,还可能有一个查询参数variant用于指定商品的变体。可以这样定义路由:
const routes = [{path: '/product/:id',name: 'product',component: Product,children: [{path: 'variant',name: 'variant',component: Variant}]} ]
在Product组件中,可以通过$route.params.id获取商品 ID,通过$route.query.variant获取变体参数。当访问/product/123时,$route.query.variant为空;当访问/product/123?variant=red时,$route.query.variant的值为red。
(三)嵌套路由
在复杂的应用中,页面往往具有多层嵌套结构,Vue Router 允许配置嵌套路由来满足这种需求。例如,有一个用户管理模块,用户详情页面包含个人资料和用户发布的文章两个子页面。配置嵌套路由的代码如下:
const routes = [{path: '/user/:id',component: User,children: [{path: 'profile',name: 'profile',component: UserProfile},{path: 'posts',name: 'posts',component: UserPosts}]} ]
在上述代码中,User组件作为父组件,其模板中需要包含<router - view>标签,用于渲染子路由对应的组件。例如:
<template><div><h1>用户详情</h1><router - view></router - view></div> </template>
当访问/user/123/profile时,UserProfile组件会被渲染到User组件的<router - view>中;当访问/user/123/posts时,UserPosts组件会被渲染。需要注意的是,子路由的path不需要以/开头,它会继承父路由的路径。
三、编程式导航
除了使用<router - link>组件进行声明式导航外,Vue Router 还提供了编程式导航的方式,即通过调用路由实例的方法来实现页面跳转。
(一)使用 push 方法
push方法用于向历史记录中添加一个新的路由记录,从而实现页面跳转。它可以接收多种类型的参数:
- 字符串路径:直接传入目标路径字符串,例如:
router.push('/home')
带有路径的对象:通过对象形式传入路径,这种方式更加灵活,例如:
router.push({ path: '/about' })
命名的路由,并加上参数:如果在定义路由时给路由设置了name,可以通过name来导航,并传入参数,代码如下:
router.push({ name: 'user', params: { id: 123 } })
上述代码会跳转到name为user的路由,并将id参数设置为123。
4. 带查询参数:可以在跳转时携带查询参数,例如:
router.push({ path: '/search', query: { keyword: 'vue' } })
此时,跳转到的 URL 为/search?keyword=vue。
(二)使用 replace 方法
replace方法与push方法类似,不同之处在于replace方法不会向历史记录中添加新记录,而是替换当前的历史记录。例如:
router.replace({ path: '/login' })
执行上述代码后,当前页面会跳转到/login,并且历史记录中当前页面的记录会被/login的记录替换,用户无法通过浏览器的后退按钮回到之前的页面。
(三)使用 go 方法
go方法用于在历史记录中向前或向后跳转指定的步数,类似于浏览器的前进和后退按钮。例如
//向前一页跳转 router.go(1) //向后一页跳转 router.go(-1)
四、路由守卫
路由守卫主要用于通过跳转或取消的方式守卫导航,在路由导航的不同阶段执行特定的逻辑,例如权限验证、页面加载前的数据预取等。
(一)全局前置守卫
全局前置守卫会在每次路由导航之前被调用,其语法如下:
router.beforeEach((to, from) => {// to: 即将进入的目标路由对象// from: 当前导航正要离开的路由对象// 可以在这里进行权限验证等操作if (to.meta.requiresAuth &&!isAuthenticated()) {return { name: 'login' } // 未登录则跳转到登录页面}return true // 允许导航 })
在上述代码中,to.meta.requiresAuth用于判断目标路由是否需要登录权限,isAuthenticated()是一个自定义函数,用于判断用户是否已经登录。如果用户未登录且目标路由需要权限,则返回一个新的路由对象,跳转到登录页面;否则返回true,允许导航继续进行。
(二)路由独享的守卫
每个路由配置对象可以定义自己的beforeEnter守卫,该守卫仅在进入该路由时被调用。例如:
const routes = [{path: '/admin',name: 'admin',component: Admin,beforeEnter: (to, from) => {if (!isAdmin()) {return { name: 'home' } // 非管理员用户跳转到首页}return true}} ]
这里的isAdmin()是一个判断用户是否为管理员的自定义函数,如果用户不是管理员,则跳转到首页,否则允许进入/admin路由。
(三)组件内的守卫
在组件内部也可以定义路由守卫,有以下几种:
- beforeRouteEnter:在渲染该组件的对应路由被验证前调用,此时组件实例还未被创建,不能使用this。例如:
export default {setup() {const beforeRouteEnter = (to, from) => {// 可以在进入路由前进行一些操作,如数据预取const userId = to.params.idfetchUserData(userId)}return {beforeRouteEnter}} }
beforeRouteUpdate:在当前路由改变,但是该组件被复用时调用,例如,在动态路由参数变化时,组件不会重新创建,而是复用已有的组件实例,此时可以在这个守卫中处理参数变化的逻辑。代码如下:
export default {setup() {const beforeRouteUpdate = (to, from) => {const newId = to.params.idconst oldId = from.params.idif (newId!== oldId) {// 根据新的参数重新获取数据fetchData(newId)}}return {beforeRouteUpdate}} }
beforeRouteLeave:在导航离开渲染该组件的对应路由时调用,可以用于防止用户不小心离开页面,例如,当用户在表单中输入了未保存的数据时,提示用户是否保存。示例代码如下:
<template><form><input v - model="formData.name"><input v - model="formData.email"></form> </template> <script> export default {data() {return {formData: {name: '',email: ''}}},setup() {const beforeRouteLeave = (to, from) => {if (Object.keys(this.formData).some(key => this.formData[key])) {const confirmLeave = window.confirm('您有未保存的数据,确定离开吗?')return confirmLeave}return true}return {beforeRouteLeave}} } </script>
五、路由元信息
在定义路由时,可以为每个路由配置meta字段,用于存储一些自定义的元信息,例如页面标题、是否需要权限等。这些元信息可以在路由守卫或组件中获取和使用。例如:
const routes = [{path: '/dashboard',name: 'dashboard',component: Dashboard,meta: {title: '仪表盘',requiresAuth: true}},{path: '/login',name: 'login',component: Login,meta: {title: '登录'}} ]
在全局前置守卫中,可以根据meta字段来设置页面标题,例如:
router.beforeEach((to, from) => {document.title = to.meta.title || '默认标题'return true})
在权限验证时,也可以通过meta字段判断目标路由是否需要权限:
router.beforeEach((to, from) => {if (to.meta.requiresAuth &&!isAuthenticated()) {return { name: 'login' }}return true})
通过以上对 Vue 3 路由配置和使用的详细讲解,相信你对 Vue Router 有了更深入的理解。合理运用路由的各种特性,可以构建出更加灵活、高效的单页应用。在实际开发中,根据项目需求不断探索和实践,充分发挥 Vue Router 的强大功能。
希望这篇博客能对你有所帮助,感兴趣的话,请在评论区留言讨论吧!!
相关文章:
Vue 3 路由配置使用与讲解
在现代前端开发中,单页应用(SPA)已成为主流趋势,Vue.js 作为一款优秀的 JavaScript 框架,在构建 SPA 方面表现出色。Vue Router 作为 Vue.js 官方的路由管理器,与 Vue.js 核心深度集成,极大地简…...
7系列fpga在线升级和跳转
一、常见跳转方式 1,一般FPGA只要上电,就会自动从外部flash的0地址加载程序。2,而我们所谓的在线式升级就是在flash0地址放一个程序(boot/golden image),然后在后面再放一个程序(app/update im…...
解决靶机分配的 IP 地址与 Kali 机器静态 IP 地址冲突的方法
在网络安全学习或渗透测试中,经常会遇到靶机和 Kali 机器处于同一网络环境的情况。如果靶机通过 DHCP 自动获取的 IP 地址与 Kali 机器手动设置的静态 IP 地址发生冲突,就会导致网络通信异常,例如无法正常 ping 通或访问目标。本文将详细介绍…...
LLM做逻辑推理题 - 飞机事件
题目: 有N架一样的飞机停靠在同一个机场,每架飞机都只有一个油箱,每箱油可使飞机绕地球飞半圈。注意:天空没有加油站,飞机之间只是可以相互加油。如果使某一架飞机平安地绕地球飞一圈,并安全地回到起飞时的机场&#x…...
【Netty4核心原理】【全系列文章目录】
文章目录 一、前言二、目录 一、前言 本系列虽说本意是作为 《Netty4 核心原理》一书的读书笔记,但在实际阅读记录过程中加入了大量个人阅读的理解和内容,因此对书中内容存在大量删改。 本系列内容基于 Netty 4.1.73.Final 版本,如下…...
SAP ECCS 标准报表 切换为EXCEL电子表格模式
在解决《SAP ECCS标准报表在报表中不存在特征CG细分期间 消息号 GK715报错分析》问题过程中通过DEBUG方式参照测试环境补录数据后,不再报GK715错误,此时用户要的很急,要出季报。要求先把数据导出供其分析出季报。 采用导出列表方式ÿ…...
开源推荐#6:可爱的临时邮箱服务
大家后,我是 jonssonyan。 我们的邮箱常常被各种推广邮件、验证码甚至垃圾邮件淹没。每次注册新服务或临时需要一个邮箱时,都担心自己的主邮箱地址被泄露或滥用?也许你用过一些公共的临时邮箱服务,但数据隐私和可控性总是让人不那…...
SpringBoot企业级开发之【用户模块-更新用户密码】
具体内容: 依旧是查看接口文档信息: 开发思路: 实操: 1.controller //更新用户密码PatchMapping("/updatePwd")public Result updatePwd(RequestBody Map<String,String> params) {//1.校验参数String oldPwdparams.get(…...
MyBatis-Plus 通过 ID 更新数据为NULL总结
在使用 MyBatis-Plus 通过 ID 更新数据时,若需将字段值设为 null,可参考以下解决方案: 方法一:使用 TableField 注解 在实体类字段上添加注解,指定更新策略为忽略非空检查: public class User {TableFie…...
SpringCloud Alibaba微服务工程搭建
前言 在讲微服务工程的搭建之前,我们先分析下为什么要使用微服务呢? 1、单体应用的痛点 维护困难:代码臃肿,牵一发而动全身。扩展性差:无法按需扩展特定功能,只能整体扩容。技术栈僵化:难以引…...
mobaXterm添加自定义内容按钮方法、mobaXterm宏的另一种使用方式、mobaxterm免输密码自动su到root用户
文章目录 说明添加自定义按钮内容方式完整流程说明root密码demo一键suroot 说明 就是给mobax添加secureCRT工具中的自定义按钮。 但发现mobax中的按钮其实是固定功能,并不能自定义编辑按钮内容。 添加自定义按钮内容方式 完整流程说明 虽然mobax不能直接像CRT那…...
04.Python代码NumPy-通过索引或切片来访问和修改
04.Python代码NumPy-通过索引或切片来访问和修改 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ python语法…...
继承:(开始C++的进阶)
我们今天来学习C的进阶: 面向对象三大特性:封装,继承,多态。 封装我们在前面已经学了,我们细细理解,我们的类的封装,迭代器的封装(vector的迭代器可以是他的原生指针,li…...
【本地MinIO图床远程访问】Cpolar TCP隧道+PicGo插件,让MinIO图床一键触达
写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言MinIO本地安装与配置cpolar 内网穿透PicGo 安装MinIO远程访问总结互动致谢参考目录…...
OpenCV数组的操作
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 这里的数组不是普通意义上的数组。核心模块Core专门提供了一些全局函数用于对数组(矩阵)进行操作。常用函数如表3-2所示。 3.2.1 寻找数组中最小值和最大值的位置(minMaxL…...
python idea pycharm ModuleNotFoundError: No module named ‘bin‘
一、解决方案 1.修正运行配置中的环境变量 2.打开运行配置: 3.点击 IDEA 右上角配置下拉菜单 -> Edit Configurations。 4.选择 Django Server 配置(或自定义的调试配置)。 5.移除错误变量: 5.1在 Environment var…...
自动驾驶创建场景(just soso)
使用 Driving Scenario Designer 创建弯道驾驶场景并导出模型的详细步骤整理与补充说明: 步骤 1:打开应用程序 启动 MATLAB在 MATLAB 命令窗口中输入以下命令,打开驾驶场景设计器:matlabCopy CodedrivingScenarioDesigne…...
大模型在轮状病毒肠炎预测及临床方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、轮状病毒肠炎概述 2.1 病毒特性与传播途径 2.2 临床症状与病理机制 2.3 流行病学特征 三、大模型技术原理及在医疗领域应用现状 3.1 大模型基本原理 3.2 医疗领域应用案例分析 3.3 大模型应用于轮状病毒…...
从 PyTorch 到 ONNX:深度学习模型导出全解析
在模型训练完毕后,我们通常希望将其部署到推理平台中,比如 TensorRT、ONNX Runtime 或移动端框架。而 ONNX(Open Neural Network Exchange)正是 PyTorch 与这些平台之间的桥梁。 本文将以一个图像去噪模型 SimpleDenoiser 为例&a…...
移动硬盘突然打不开紧急救援指南:从排查到完整恢复
突发状况的典型特征 当移动硬盘突然打不开时,用户常会遇到多种异常表现:接入电脑后硬盘指示灯虽亮但无法识别、系统反复提示“设备未连接成功”或弹出“磁盘结构损坏”的警告。部分情况下,资源管理器中的盘符虽可见,但双击后显示…...
HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法
HarmonyOS应用开发:父子组件状态管理实验报告 引言 在HarmonyOS应用开发领域,组件之间的状态管理是一个至关重要的概念。通过有效的状态管理,我们可以确保应用的数据流动清晰、可预测,从而提升应用的稳定性和可维护性。本次实验…...
lodash-es 详解
import { cloneDeep } from lodash-es 是使用 ES Modules 语法从 lodash-es 包中按需导入 cloneDeep 函数。这是现代前端开发中推荐的使用 Lodash 的方式: 1. lodash-es 是什么? 它是 Lodash 的 ES Modules 版本(普通 lodas…...
使用nvm install XXX 下载node版本时网络不好导致npm下载失败解决方案
若nvm install ***安装报错解决方案: 离线安装Node.js npm,可直接下载Node.js 14.21.3的完整离线包(含npm): 访问 Node.js历史版本下载页:https://nodejs.org/download/release/v14.21.3/ 下载 node-v14.…...
VScode+OpenOCD+HTOS栈回溯在国产mcu芯片上完全调试
VScodeOpenOCDCmakeHTOS栈回溯在国产32芯片上完全调试 说实话用的都是HAL库开发的,flash链接文件用的都是stm32的,只能说国产芯片抄的基本完全一样了。具体芯片是什么就不介绍了,看过文章就能猜出来是哪家的了。代码开源在Gitee上了。https:…...
2025年最新版动漫短剧系统开发小程序app教程,源码部署上线
以下是动漫短剧系统开发上线的详细教程,包含从0到1的全流程: 一、需求分析(关键:明确核心功能) 核心功能清单: 用户端:短视频浏览、弹幕评论、收藏/点赞、创作者关注、付费订阅。创作者端&am…...
Java练习——day2(集合嵌套)
文章目录 练习1练习2练习3 练习1 给定一个字符串列表List words,统计每个单词出现的次数,并用Map<String, Integer>存储结果。 示例代码: import java.util.*;public class WordCount {public static void main(String[] args) {// 示…...
国产CPU处理器性能实测:龙芯/海光/兆芯/华颉VS英特尔和AMD!
最近后台总收到粉丝留言:"现在国产CPU到底行不行?想换电脑又怕国产的不够强"。今天咱们就掏心窝子聊聊这个话题——国产CPU处理器到底是"弯道超车"还是"贴牌组装"?性能真能和英特尔i5、AMD锐龙掰手腕吗&#x…...
Excel自定义函数取拼音首字母
1.启动Excel 2003(其它版本请仿照操作),打开相应的工作表; 2.执行“工具 > 宏 > Visual Basic编辑器”命令(或者直接按“AltF11”组合键),进入Visual Basic编辑状态; 3.执行“…...
Vue3 SSR生物启发架构:仿生渲染与DNA流式编码
一、神经元弹性调度网络 1.1 突触连接式渲染集群 1.2 生物能效对比表 调度模式能耗(kWh/万次)突触延迟容错阈值信息熵利用率轮询调度4.2220ms60%35%蚁群算法2.8150ms75%48%神经形态调度0.945ms93%82%DNA协进化调度0.312ms99.9%95% 二、DNA流式编码协议 2.1 四碱基序列转换器…...
git的上传流程
好久没使用git 命令上传远程仓库了。。。。。温习了一遍; 几个注意点--单个文件大小不能超过100M~~~ 一步步运行下面的命令: 进入要上传的文件夹内,点击git bash 最终 hbu的小伙伴~有需要nndl实验的可以自形下载哦...
C++学习记录:
今天我们来学习一门新的语言,也是C语言最著名的一个分支语言:C。 在C的学习中,我们主要学习的三大组成部分:语法、STL、数据结构。 C的介绍 C的历史可追溯至1979年,当时贝尔实验室的本贾尼斯特劳斯特卢普博士在面对复杂…...
MAC-批量任务并行处理实现
批量任务并行处理示例(基于Spring框架) 以下是一个 完整可运行 的批量任务并行处理示例,包含 任务拆分、异步执行、线程池管理、耗时 监控 等核心功能,适用于数据清洗、文件处理、批量通知等场景。 1. 线程池配置 @Configuration @EnableA…...
《电子类专业:通往科技未来的钥匙》
一、电子类专业全景概览 在当今科技飞速发展的时代,电子类专业无疑占据着现代科技体系中基础与核心的重要地位。从我们日常生活中不可或缺的智能手机、电脑,到推动社会进步的人工智能、大数据技术,再到探索宇宙奥秘的航天航空设备,电子类专业的身影无处不在。它就像一把万…...
全链路开源数据平台技术选型指南:六大实战工具链解析
在数字化转型加速的背景下,开源技术正重塑数据平台的技术格局。本文深度解析数据平台的全链路架构,精选六款兼具创新性与实用性的开源工具,涵盖数据编排、治理、实时计算、联邦查询等核心场景,为企业构建云原生数据架构提供可落地…...
大塔集团乔迁开新局 企业赋能贯全程
2025年4月15 日,在佛山市佛山大道北175号,大塔集团乔迁开业盛大启幕,业界目光聚焦于此。 点睛仪式 揭牌仪式 彩绸飘扬、嘉宾云集,现场气氛热烈非凡,这一标志性时刻,宣告着大塔集团正式踏上全新发展征程。 …...
Ubuntu系统下部署 NFS服务教程
Ubuntu系统下部署 NFS服务教程 一、NFS 服务简介二、环境准备三、服务器端配置1. 安装 NFS 服务端2. 创建共享目录3. 配置共享规则4. 生效配置并启动服务四、客户端配置1. 安装 NFS 客户端2. 创建本地挂载点3. 挂载远程目录4. 验证挂载状态5. 测试读写五、高级配置技巧1. 开机自…...
shell编程正则表达式与文本处理器
目录 基础正则表达式 扩展正则表达式 sed工具使用方法 awk 工具使用方法 前言 在 Shell 编程的世界里,正则表达式与文本处理器是两大不可或缺的利器。正则表达式(RegularExpression,简称 RE)作为一种强大的字符串匹配工具,能够通过特定的字符组合来描述和匹配一系列符合特…...
SparseDrive---论文阅读
纯视觉下的稀疏场景表示 算法动机&开创性思路 算法动机: 依赖于计算成本高昂的鸟瞰图(BEV)特征表示。预测和规划的设计过于直接,没有充分利用周围代理和自我车辆之间的高阶和双向交互。场景信息是在agent周围提取ÿ…...
YOLOV8 OBB 海思3516训练流程
YOLOV8 OBB 海思3516训练流程 目录 1、 下载带GPU版本的torch(可选) 1 2、 安装 ultralytics 2 3、 下载pycharm 社区版 2 4、安装pycharm 3 5、新建pycharm 工程 3 6、 添加conda 环境 4 7、 训练代码 5 9、配置Ymal 文件 6 10、修改网络结构 9 11、运行train.py 开始训练模…...
ThinkPHP框架接入Stripe支付
我的框架是ThinkPHP5.0,后台是fastadmin 1.安装composer包,包名是 stripe/stripe-php 2.下单代码 <?php namespace app\common\service; use app\common\controller\Api; use Stripe\Stripe; use Stripe\Checkout\Session; use think\Config;clas…...
文件上传漏洞学习
什么是文件上传漏洞 文件上传漏洞指用户通过上传一个恶意的可执行文件,例如木马、病毒、webshell、恶意脚本等等在服务器中执行,配合其他工具,获得网站控制权或达到一些其他效果。 文件上传漏洞原理 由于对上传文件的格式限制不够严格&…...
【function call】大模型的hello function call
1. 所有的大模型的function call 功能就是将function 也当作输入到大模型中 2. 不同的平台或者模型调用的方式可能不一样 一个硅基流动的例子 import requests from openai import OpenAIclient = OpenAI(api_key="sk-vuffqulyakrzccyqenavdryxyamqkhemidvgaihdqmehmhlv&…...
CVFSNet:一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级(mTICI)评分的跨视图融合评分网络|文献速递-深度学习医疗AI最新文献
Title 题目 CVFSNet: A Cross View Fusion Scoring Network for end-to-end mTICI scoring CVFSNet:一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级(mTICI)评分的跨视图融合评分网络 01 文献速递介绍 中风目前是全球主要的致死原因之…...
解决 .Net 6.0 项目发布到IIS报错:HTTP Error 500.30
今天在将自己开发许久的项目上线的时候,发现 IIS 发布后请求后端老是报一个 HTTP Error 500.30 的异常,如下图所示。 后来仔细调查了一下发现是自己的程序中写了 UseStaticFiles 的依赖注入,这个的主要作用就是发布后端后,想…...
施磊老师基于muduo网络库的集群聊天服务器(一)
文章目录 技术栈项目需求环境安装muduo网络库安装编译错误:解决办法:移动头文件和库文件 redis和mysql安装验证mysql环境修改mysql密码Nginx--先不安装 Json介绍为什么需要json?什么是 json 序列化?常用的数据传输序列化格式?直接使用json第三方库json序列化代码演示复杂键值…...
WebStorm中Gitee账号的密码登录与令牌登录设置
1.账号密码添加 1.1安装插件 说明:安装Gitee插件 1.2点击通过账号密码登录 说明:需要Gitee账号和密码 1.3登录 说明:通过邮箱和密码登录 1.4登录成功 2.令牌登录 2.1Token登录 说明:需要Gitee生成的私人令牌进行登录。 2.2G…...
Android开发案例——简单计算器
实现计算机的简单功能 1、显示页面jsj.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height&…...
实现类似 “更新中” 的水平进度条按钮效果
如上图所示 activity_test3.xml <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"match_parent…...
【QT入门到晋级】QT打动态库包及引入动态库包
前言 本篇为持续更新状态,内容包含window、Linux下打动态库包,以及引入动态库包的方式。 一、window 1、动态库打包 以百度的OCR接口调用打dll库为例,以下为qtcreator创建动态库过程: 1.1Qtcreator创建lib项目 创建成功后&…...
Linux:解决 yum 官方源无法使用(CentOS 7)
文章目录 一、原因二、解决方法 一、原因 CentOS 7 在 2024年 6 月 30 日结束了它的生命周期(End of Life, EOL),这意味着官方不再提供更新和支持,包括其 yum 源也将停止服务。 因此对于仍然需要使用 CentOS 7 的用户来说&#…...