当前位置: 首页 > news >正文

WPF项目实战视频《二》(主要为prism框架)

14.prism框架知识(1)

使用在多个平台的MVVM框架
新建WPF项目prismDemo
项目中:工具-NuGet包管理:安装Prism.DryIoc框架
在git中能看Prism的结构和源代码:git链接地址
例如:Prism/src/Wpf/Prism.DryIoc.Wpf/PrismApplication.cs这个类,就是在我们自己的prismDemo项目中需要更改继承使用。
在这里插入图片描述
报错:加上(更改)以下三行,重新生成并实现抽象类,上图报错即解决。
在这里插入图片描述
抽象类的实现:
在这里插入图片描述
管理扩展:添加"Prism Template Pack",就不用每次新建项目都添加一次prism了
添加扩展之后重新打开VS,新建项目:
在这里插入图片描述
打开之后就包含有prism和一些项目文件结构:
在这里插入图片描述

15.prism区域介绍(2)

主要内容:区域的概念和使用方法。
prism界面(.xaml文件中)中划分区域,可放入容器或者控件(动态的)

在.xaml中加入不同的子模块:(添加xsml子模块-主页面.png)
在这里插入图片描述

在views中新加三个用户控件:page1,page2,page3
现需要点击不同的按钮进入不同的页面:在ViewModels文件夹中修改MainWindowViewModel.cs文件:

public class MainWindowViewModel : BindableBase
{//执行不同的模块public DelegateCommand<string> OpenCommand { get; private set; }public MainWindowViewModel(){//执行不同的模块OpenCommand = new DelegateCommand<string>(Open);}private void Open(string obj){switch (obj){case "viewA": break;case "viewB": break;case "viewC": break;}}
}

绑定:.xaml中加入Content参数,进行绑定,传递参数用:CommandParameter参数

 <StackPanel Orientation="Horizontal"><Button Margin="5" Content="打开模块A" Command="{Binding OpenCommand}" CommandParameter="viewA"/><Button Margin="5" Content="打开模块B" Command="{Binding OpenCommand}" CommandParameter="viewB"/><Button Margin="5" Content="打开模块C" Command="{Binding OpenCommand}" CommandParameter="viewC"/></StackPanel><!--需要在.cs文件中连接需要使用Content--><ContentControl Grid.Row="1" Content="{Binding Body}"/>

连接的Body的使用方式:在MainWindowViewModel.cs文件中

//定义一个跟MainWindow.xaml中绑定对应的Body
private object body;
public object Body
{get { return body; }set { body = value; RaisePropertyChanged(); }
}
....
//使用:
private void Open(string obj)
{switch (obj){case "viewA": Body = new Page1(); break;	//此处使用case "viewB": Body = new Page2();  break;	//此处使用case "viewC": Body = new Page3();  break;	//此处使用}
}

(以上使用到Prism框架的自动查找上下文功能(views – viewModels))功能完成。


发现问题:view页面和viewModel后端处理,耦合性较大。需要降低耦合性------解决方式:使用prism插件:
在这里插入图片描述

在MainWindow.xaml中,需要注意prism的扩展插件自动生成了以下代码,注意不要重复添加,会报错。

<ContentControl prism:RegionManager.RegionName="ContentRegion"/>
<!--ui界面第二行内容-->
<!--需要在.cs文件中连接需要使用Content-->
<!--<ContentControl Grid.Row="1" Content="{Binding Body}"/>--><!--更改:使用prism的方式,降低耦合性,使用ContentRegion进行识别-->
<ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion"/>

MainWindowViewModel.cs文件中:

//执行不同的模块
public DelegateCommand<string> OpenCommand { get; private set; }private readonly IRegionManager regionManager;
//以下:使用prism的方式进行
public MainWindowViewModel(IRegionManager regionManager)
{//regionManager主要用于管理模块OpenCommand = new DelegateCommand<string>(Open);this.regionManager = regionManager;}
private void  Open(string obj) 
{//regionManager.Regions["ContentRegion"].RequestNavigate("Page1"); //依赖注入的形式(在App中进行同步修改)识别Page1regionManager.Regions["ContentRegion"].RequestNavigate(obj);
}

Open(string obj) 会根据button commmand的内容对应填入obj的值

<Button Margin="5" Content="打开模块A" Command="{Binding OpenCommand}" CommandParameter="Page1"/>
<Button Margin="5" Content="打开模块B" Command="{Binding OpenCommand}" CommandParameter="Page2"/>
<Button Margin="5" Content="打开模块C" Command="{Binding OpenCommand}" CommandParameter="Page3"/>

在App.xaml.cs中依赖注入使ViewA能被识别
在这里插入图片描述
以上就完成了,使用prism插件,使用依赖注入,完成点击按钮切换页面的功能。
总结:首先通过IRegionManager接口获取当全局定义的可用区域,然后往这个区域动态的设置内容,设置方式:依赖注入

16.prism模块化介绍(3)

项目开发时往往会分多个模块进行开发,多个文件夹,本质上也是一个类库。此处讲解如何添加程序集到主程序的容器中:
以新建项目类库为例:基于整个解决方案,新建两个WPF类库项目,分别命名为:ModelA,和ModelB。
在ModelA和ModelB中添加Views文件夹,在ModelA文件夹中添加用户控件ViewA,在ModelB文件夹中添加用户控件ViewB。
程序集被识别成模块的特征:新定义一个类ModuleAprofile.cs,项目中添加prism.dryIoc包之后,使ModuleAprofile继承自IModule,并实现对应的接口方法(函数内容可为空,但是必须实现)
在这里插入图片描述
在上文此.cs文件中的RegisterTypes函数中加入其依赖注入:(ModelB中同样步骤进行添加)

public void RegisterTypes(IContainerRegistry containerRegistry)
{containerRegistry.RegisterForNavigation<ViewA>();
}

如何使之联系起来?:在主程序中加载ModuleA和ModuleB的方式有两种:一种是代码的方式,一种是配置文件的方式:

第一种:代码的方式

(此处需要注意使用插件创建的原始项目自动导入的是.net 6.0 而ModuleA和ModuleB导入的是8.0 需要版本变为一致,否则会报错。《项目->属性 中可修改版本》)
在主程序中加入项目引用,ModuleA和ModuleB
然后在App.xmls.cs中增加和修改:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{在此加入依赖注入//containerRegistry.RegisterForNavigation<Page1>(); //后面的小括号可以重命名名字,不填的话就为<>中的Page1//containerRegistry.RegisterForNavigation<Page2>();//containerRegistry.RegisterForNavigation<Page3>();
}//主程序中导入ModuleA和ModuleB,方法一:代码的模式
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{moduleCatalog.AddModule<ModuleAprofile>();moduleCatalog.AddModule<ModuleBprofile>();base.ConfigureModuleCatalog(moduleCatalog);
}

在主程序的页面MainWindow.xaml中:修改为对应的ViewA,ViewB

<StackPanel Orientation="Horizontal"><Button Margin="5" Content="打开模块A" Command="{Binding OpenCommand}" CommandParameter="ViewA"/><Button Margin="5" Content="打开模块B" Command="{Binding OpenCommand}" CommandParameter="ViewB"/><Button Margin="5" Content="打开模块C" Command="{Binding OpenCommand}" CommandParameter="Page3"/>
</StackPanel>
第二种:加载动态库dll的方式

在App.xmls.cs中增加和修改:

//第二种方式:加载动态库的方式CreateModuleCatalog
protected override IModuleCatalog CreateModuleCatalog()
{return new DirectoryModuleCatalog() { ModulePath = @".\Modules" };
}

把moduleA文件目录下bin下生成的ModelA.dll和对应的ModelB.dll放在主程序下的bin/debug目录下。

第三种:加载配置文件的方式

此不举例

17.prism导航功能(4)

之前的open有使用在区域之间进行模块的切换。此章详细讲解。
之前使用过的导航方式:
App.xaml:

 protected override void RegisterTypes(IContainerRegistry containerRegistry){在此加入依赖注入containerRegistry.RegisterForNavigation<Page1>(); //后面的小括号可以重命名名字,不填的话就为<>中的Page1//containerRegistry.RegisterForNavigation<Page2>();//containerRegistry.RegisterForNavigation<Page3>();}

ModuleA和ModuleB项目分别添加ViewModels文件夹存放对应的ViewAViewModels.cs和ViewBViewModels.cs文件
在这里插入图片描述
需要在对应的view.xaml文件中加入prism自动识别
在这里插入图片描述
也可以手动的绑定:ModuleAprofile.cs中(较为常用)
在这里插入图片描述
绑定之后,就可以在对应viewmodule中实现对应的业务代码


添加导航的参数:

在主程序的module中MainWindowViewModel.cs文件,加入导航的参数
在这里插入图片描述
在ModuleA模块中识别出来:
使ModuleA下的ModuleAViewModules.cs 使之继承自INavigationAware然后实现其对应的接口
在这里插入图片描述

//添加数据有关的基类BindableBase
public class ViewAViewModules : BindableBase,INavigationAware
{private string title;public string Title{	//要注意这里不能使用默认的private  要改为public 否则回报错get { return title; }   set { title = value; RaisePropertyChanged(); }}public bool IsNavigationTarget(NavigationContext navigationContext){//每次重新导航的时候,是否重用原来的实例return false;		//这里使用true的话下次从ModelB切换到ModelA不会进行覆盖。//throw new NotImplementedException();}public void OnNavigatedFrom(NavigationContext navigationContext){//throw new NotImplementedException();//拦截导航请求}public void OnNavigatedTo(NavigationContext navigationContext){//throw new NotImplementedException();if(navigationContext.Parameters.ContainsKey("Title")) {//用来接收viewmodule传递的参数,传递什么类型就用什么类型接收Title = navigationContext.Parameters.GetValue<string>("Title");}}
}

使用OnNavigatedFrom进行导航拦截,在进行切换时会调用此函数
方式:之前ViewAViewModules继承自INavigationAware,可以改为IConfirmNavigationRequest,实现其接口ConfirmNavigationRequest,此接口主要用于验证是否允许切换

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{//验证是否允许切换//throw new NotImplementedException();bool result = true;if(MessageBox.Show("确认导航?","提示",MessageBoxButton.YesNo)==MessageBoxResult.No){//如果是no 那么result = false;}continuationCallback(result);   //通过这个委托把这个结果(是否拦截导航)传进去
}

类似的导航功能还有:返回上一步:导航日志(此处省略)

18.prism对话服务(5)

也就是弹窗的功能。
在祝程序的MainWindow.xaml中,添加两个按钮进行弹窗触发。在主程序中添加窗口ViewAA.cs(以下图片上的ViewC都为ViewAA),在open函数中new此类,点击时则会有窗口出现。

在这里插入图片描述
但是特定的页面依赖于特定的实现,耦合度太高,这个问题如何去解决?-------依赖注入的方式(同上band).
将之前在主项目文件中创建的窗口ViewC.cs删掉,在ModuleA中新建一个用户控件ViewAA.cs,自定义控件的分布,提示和其他按钮。

<Grid><Grid.RowDefinitions><RowDefinition Height="auto" /><RowDefinition/><RowDefinition Height="auto" /></Grid.RowDefinitions><TextBlock Text="温馨提示" /><TextBlock Grid.Row="1" Text="hello~~~~" FontSize="80"  VerticalAlignment="Center"/><StackPanel Orientation="Horizontal" Grid.Row="2"><!--水平排列--><Button Content="取消" /><Button Content="确认" /></StackPanel>
</Grid>

在这里插入图片描述
然后注入依赖:之前注入导航是:RegisterForNavigation 现在注入对话框是:RegisterDialog
在这里插入图片描述
加入ViewAA对应的ViewAAViewModules:继承自IDialogAware,然后点击实现对应接口。

public class ViewAAViewModules : IDialogAware
{//对话框//public string Title => throw new NotImplementedException();//修改,不抛异常public string Title {  get; set; }public event Action<IDialogResult> RequestClose;public bool CanCloseDialog(){//允许被关闭return true;//throw new NotImplementedException();}public void OnDialogClosed(){//关闭窗口DialogParameters keys = new DialogParameters();keys.Add("Value", "viewAA:Dialog");RequestClose?.Invoke(new DialogResult(ButtonResult.OK, keys));//throw new NotImplementedException();}public void OnDialogOpened(IDialogParameters parameters){//接收弹窗中的参数//throw new NotImplementedException();}
}

然后在ModuleAprofile.cs注册依赖的地方,将viewAA和viewAAviewmodules进行绑定

在这里插入图片描述
对话框传递参数:主项目中MainWindowViewModel.cs中写入需要传递的参数。

//对话框
private readonly IDialogService dialogService;
public MainWindowViewModel(IDialogService dialogService)
{//regionManager主要用于管理模块OpenCommand = new DelegateCommand<string>(Open);this.dialogService = dialogService;}
private void Open(string obj)
{DialogParameters keys = new DialogParameters();keys.Add("Title", "测试弹窗");		//传递参数dialogService.ShowDialog(obj,keys,callback =>{//回调方法});
}

ViewAAViewModules中接收参数的函数OnDialogOpened修改:

public void OnDialogOpened(IDialogParameters parameters)
{//接收弹窗中的参数//throw new NotImplementedException();Title=parameters.GetValue<string>("Title");
}

点击【打开对话框A】,则显示“测试弹窗”-弹窗
在这里插入图片描述
现在把【确认/取消按钮加入对应的功能】:
ViewAAViewModules.cs写构造函数

public DelegateCommand CancelCommand {  get; set; } //取消
public DelegateCommand SaveCommand { get; set; }    //保存public ViewAAViewModules() {CancelCommand = new DelegateCommand(Cancel);SaveCommand = new DelegateCommand(Save);
}private void Save()
{//新生成方法-保存OnDialogClosed();
}private void Cancel()
{//新生成方法-取消RequestClose?.Invoke(new DialogResult(ButtonResult.No));
}

ViewAA给按钮中绑定command

 <Button Content="取消"  Command="{Binding CancelCommand}"/><Button Content="确认"  Command="{Binding SaveCommand}" />

在之前MainWindowViewModel的回调函数中进行判断

 private void Open(string obj){DialogParameters keys = new DialogParameters();keys.Add("Title", "测试弹窗");dialogService.ShowDialog(obj,keys,callback =>{//回调方法,点击之后获取点击的结果if (callback.Result == ButtonResult.OK) {//如果点击了ok那么获取传递的值string result = callback.Parameters.GetValue<string>("Value");}});}

实现点击确定按钮(OK)进行数据传递,点击取消按钮(NO)不做操作

好处:实现业务代码的简化,耦合性降低

19.prism发布订阅(6)

创建Event文件夹,创建一个新的类:MessageEvent.cs文件,消息模型。
在这里插入图片描述
使用:ViewAAViewModules.cs构造函数注入
在这里插入图片描述
例如,在ViewAA.xaml中,进行订阅:

在这里插入图片描述
进行测试:
修改ViewAAViewModules.cs
在这里插入图片描述
测试:ViewAAViewModules.cs点击取消按钮发布信号
在这里插入图片描述
实现效果:点击打开对话框A–》弹出测试弹窗 --》点击测试弹窗取消–》
弹出接收消息弹窗
在这里插入图片描述
取消订阅功能实现:点击取消,接收到消息之后取消该消息的订阅,则第二次点击取消按钮不会再弹窗。ViewAA.xaml.cs文件
在这里插入图片描述
扩展:也可以写复杂类型的对象:

namespace ModelA.Event
{public class MessageEvent:PubSubEvent<string >{//主要用来传递string类型的消息}public class TestEvent : PubSubEvent<Test>{}public class Test{public string Id {  get; set; }public string Name { get; set; }}
}

相关文章:

WPF项目实战视频《二》(主要为prism框架)

14.prism框架知识&#xff08;1&#xff09; 使用在多个平台的MVVM框架 新建WPF项目prismDemo 项目中&#xff1a;工具-NuGet包管理&#xff1a;安装Prism.DryIoc框架 在git中能看Prism的结构和源代码&#xff1a;git链接地址 例如&#xff1a;Prism/src/Wpf/Prism.DryIoc.Wpf…...

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言&#xff0c;其特性包括&#xff1a;模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法&#xff0c;以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…...

Android中Service学习记录

目录 一 概述二 生命周期2.1 启动服务startService()2.2 绑定服务bindService()2.3 先启动后绑定2.4 先绑定后启动 三 使用3.1 本地服务&#xff08;启动式&#xff09;3.2 可通信的服务&#xff08;绑定式&#xff09;3.3 前台服务3.4 IntentService 总结参考 一 概述 Servic…...

Elasticsearch:Java ECS 日志记录 - log4j2

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松将日志格式化为与 ECS 兼容的 JSON。ECS 兼容的 JSON 日志记录可以帮我们简化很多分析&#xff0c;可视化及解析的工作。在今天的文章里&#xff0c;我来详述如何在 Java 应用里生成 ECS 相兼容的日志。 …...

MongoDB自学笔记(四)

一、前文回顾 上一篇文章中我们学习了MongoDB中的更新方法&#xff0c;也学了一部分操作符。今天我们将学习最后一个操作“删除”。 二、删除 原始数据如下&#xff1a; 1、deleteOne 语法&#xff1a;db.collection.deleteOne(< query >,< options >) 具体参…...

时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法(CPO)优化VMD二次分解

时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法&#xff08;CPO&#xff09;优化VMD二次分解 目录 时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法&#xff08;CPO&#xff09;优化VMD二次分解效果一览基本介绍程序设计参考资料 效果一览…...

新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题

苹果CMS2022新版海螺影视主题M3.1版本&#xff0c;这个主题我挺喜欢的&#xff0c;之前也有朋友给我提供过原版主题&#xff0c;一直想要破解但是后来找了几个SG11解密的大哥都表示解密需要大几百大洋&#xff0c;所以一直被搁置了。这个版本是完全解密的&#xff0c;无需SG11加…...

汽车免拆诊断案例 | 2014 款上汽名爵 GT 车发动机无法起动

故障现象 一辆2014款上汽名爵GT车&#xff0c;搭载15S4G发动机&#xff0c;累计行驶里程约为18.4万km。该车因左前部发生碰撞事故进厂维修&#xff0c;更换损坏的部件后起动发动机&#xff0c;起动机运转有力&#xff0c;但无着机迹象。用故障检测仪检测&#xff0c;发现无法与…...

vue3前端开发-小兔鲜项目-登录功能的业务接口调用

vue3前端开发-小兔鲜项目-登录功能的业务接口调用!这次&#xff0c;正式调用远程服务器的登录接口了。大家要必须使用测试账号密码&#xff0c;才能验证我们的代码。 测试账号密码是&#xff1a;账号&#xff08;xiaotuxian001&#xff09;&#xff1b;密码是&#xff08;1234…...

【Linux】vim编辑器使用详解

目录 一、vim编辑器简介二、 vim编辑器使用指南1.基本操作1.进入与退出2.模式切换 2.命令模式1.移动光标2.选择文本&#xff08;可视模式&#xff09;3.删除文字4.复制粘贴5.替换6.撤销7.注释8.多文件窗口切换 3.底行模式1.列出每行的行号2.跳转到某行3.查找字符4.保存文件5.在…...

手机怎么设置不同的ip地址

在数字化日益深入的今天&#xff0c;智能手机已成为我们生活、工作和学习中不可或缺的设备。然而&#xff0c;随着网络应用的广泛和深入&#xff0c;我们有时需要为手机设置不同的IP地址来满足特定需求。比如&#xff0c;避免网络限制、提高网络安全、或者进行网络测试等。本文…...

SpringBoot读取配置的6种方式

在SpringBoot应用开发中&#xff0c;配置文件是不可或缺的一部分。它们帮助我们管理应用的运行时参数&#xff0c;使得应用的部署和维护变得更加灵活。SpringBoot提供了多种方式来读取配置文件&#xff0c;每种方式都有其适用场景和优缺点。本文将介绍六种常用的SpringBoot读取…...

1.1 openCv -- 介绍

OpenCV(开放源代码计算机视觉库:http://opencv.org)是一个开源库,包含了数百种计算机视觉算法。本文件描述了所谓的OpenCV 2.x API,这是一个本质上基于C++的API,与基于C的OpenCV 1.x API(C API已被弃用,并且自从OpenCV 2.4版本起不再使用“C”编译器进行测试)相对。 …...

探索PostgreSQL的GUI工具:提升数据库管理效率

在当今快速发展的技术世界中&#xff0c;数据库管理是任何软件开发项目的核心部分。PostgreSQL&#xff0c;作为一款功能强大的开源关系型数据库管理系统&#xff0c;因其稳定性、可靠性和高度的可扩展性而广受开发者和数据库管理员的青睐。然而&#xff0c;尽管PostgreSQL自带…...

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知&#xff0c;电机力矩来自于转子的q轴受磁力&#xff0c;而磁场强度与电流成正比&#xff0c;也就是说电机力矩与q轴电流成正相关&#xff0c;控制了…...

springcloud接入seata管理分布式事务

下载安装包 链接: seata 配置seata-server 文件上传Linux解压 压缩包我放在/usr/local/seata中 tar -zxvf seata-server-2.0.0.tar.gz修改配置文件 设置nacos为注册和配置中心 进入文件夹 cd /usr/local/seata/seata/conf修改application.yml文件 ...... ...... cons…...

Android APP 音视频(02)MediaProjection录屏与MediaCodec编码

说明&#xff1a; 此MediaProjection 录屏和编码实操主要针对Android12.0系统。通过MediaProjection获取屏幕数据&#xff0c;将数据通过mediacodec编码输出H264码流&#xff08;使用ffmpeg播放&#xff09;&#xff0c;存储到sd卡上。 1 MediaProjection录屏与编码简介 这里…...

java中log4j.properties配置文件浅析

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的&#xff0c;它可按keyvalue格式的设置或xml格式的设置信息。通过配置&#xff0c;可以创建出Log4J的运行环境。 1、配置文件 Log4J配置文件的基本格式如下&#xff1a; #配置根Logger log4j.roo…...

RV1126 Linux 系统,接外设,时好时坏(二)排查问题的常用命令

在 RV1126 Linux 系统中,排查外设连接问题时,可以使用多种命令来诊断和调试。以下是一些常用的命令和工具: 1. 查看系统日志 dmesg: 显示内核环形缓冲区的消息,通常包含设备初始化、驱动加载和错误等信息。 dmesg | grep <设备名或相关关键字>journalctl: 查看系统…...

鸿蒙北向开发 DevEco Studio 4.1 下载安装傻瓜式教程

开篇 由于鸿蒙处于快速发展中,鸿蒙的api快速迭代更新,老版本的DevEco studio无法支持更新版本的api,因此华为官网放弃了老版本的维护.直接从华为开发者官网无法下载老版本,当前华为开发者官网已经推出next版本了 DevEco studio3.1安装教程 上述教程提供的华为开发者官网地址已经…...

pglogical扩展的基本用法介绍

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;14 文档用途 本文翻译了pglogical扩展的官方文档,介绍了pglogical扩展的各类管理函数及使用限制,详情请看下文. 一、节点管理 节点可以使用以下…...

2024年虚拟主机转移教程

转移网站并不困难&#xff0c;但选择正确的选项和最佳程序才是关键。网站托管服务被视为当今数字世界的基石&#xff0c;全球有18 亿个网站。网站所有者可以通过下载备份、将其上传到新服务器并指向域名来手动转移网站。他们还可以通过新网站托管商的助手请求来移动网站。对于初…...

Python 函数对象和函数调用

Python 函数对象和函数调用 在 Python 中&#xff0c;函数是第一类对象&#xff08;first-class objects&#xff09;。这意味着函数可以像其他对象&#xff08;如整数、字符串、列表等&#xff09;一样被传递、赋值和操作。理解函数对象和函数调用的区别是学习 Python 的关键…...

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查&#xff0c;然后自己用本地的环境&#xff0c;在自己建的库里面进行了sql语句的测试&#xff0c;主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…...

淄博网站建设贵不贵

淄博网站建设的价格因各种因素而异&#xff0c;它可能会根据您对网站的需求、功能和设计复杂性等方面的要求而有所不同。虽然淄博网站建设的费用可能因需求的不同而有所变化&#xff0c;但是无论如何&#xff0c;它通常是值得的投资。 首先&#xff0c;对于个人和小型企业来说&…...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(十)-无人机A2X服务

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…...

基于迁移学习的手势分类模型训练

1、基本原理介绍 这里介绍的单指模型迁移。一般我们训练模型时&#xff0c;往往会自定义一个模型类&#xff0c;这个类中定义了神经网络的结构&#xff0c;训练时将数据集输入&#xff0c;从0开始训练&#xff1b;而迁移学习中&#xff08;单指模型迁移策略&#xff09;&#x…...

个性化音频生成GPT-SoVits部署使用和API调用

一、训练自己的音色模型步骤 1、准备好要训练的数据&#xff0c;放在Data文件夹中&#xff0c;按照文件模板中的结构进行存放数据 2、双击打开go-webui.bat文件&#xff0c;等待页面跳转 3、页面打开后&#xff0c;开始训练自己的模型 &#xff08;1&#xff09;、人声伴奏分…...

MFC列表框示例

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.示例内容 2.程序步骤 3.运行结果 4.代码全文 1.示例内容 编写一个对话框应用程序CMFC_Li6_4_学生信息Dlg&#xff0c;对话框中有一个列表框&#xff0c;当用户…...

Android TabLayout的简单用法

TabLayout 注意这里添加tab&#xff0c;使用binding.tabLayout.newTab()进行创建 private fun initTabs() {val tab binding.tabLayout.newTab()tab.text "模板库"binding.tabLayout.addTab(tab)binding.tabLayout.addOnTabSelectedListener(object : TabLayout.On…...

基于vite + pnpm monorepo 实现一个UI组件库

基于vite pnpm monorepo的vue组件库 仓库地址 思路 好多文章都是直接咔咔咔的上代码。跟着做也没问题&#xff0c;但总觉得少了些什么。下次做的时候还要找文章参考。。 需求有三个模块&#xff0c;那么就需要三个包。使用monorepo进行分包管理。 a. 组件库 b. 组件库文档…...

FDM3D打印系列——Luck13关节可动模型打印和各种材料的尝试

luck13可动关节模型FDM3D打印制作过程 大家好&#xff0c;我是阿赵。   最近我沉迷于打印一个叫做Luck13的关节超可动人偶。 首先说明一下&#xff0c;这个模型是分为了外甲和骨骼两个部分的。   为什么我会打印了这么多个呢&#xff1f; 一、第一次尝试——PLATPU 刚开始…...

windows10 获取磁盘类型

powershell Get-PhysicalDisk | Select FriendlyName, MediaType FriendlyName MediaType ------------ --------- NVMe PC SN740 NVMe WD 256GB SSD WDC WD10EZEX-75WN4A1 HDD 适用场景 SSD&#xff1a; 适合需要快速访问速度和较高响…...

数据库之运算符

目录 一、算数运算符 二、比较运算符 1.常用比较运算符 2.实现特殊功能的比较运算符 三、逻辑运算符 1.逻辑与运算符&#xff08;&&或者AND&#xff09; 2.逻辑或运算符&#xff08;||或者OR&#xff09; 3.逻辑非运算符&#xff08;&#xff01;或者NOT&#…...

【自动化机器学习AutoML】AutoML工具和平台的使用

自动化机器学习AutoML&#xff1a;AutoML工具和平台的使用 目录 引言什么是AutoMLAutoML的优势常见的AutoML工具和平台 Google Cloud AutoMLH2O.aiAuto-sklearnTPOTMLBox AutoML的基本使用 Google Cloud AutoML使用示例Auto-sklearn使用示例 AutoML的应用场景结论 引言 自动…...

【每日一练】python求最后一个单词的长度

""" 求某变量中最后一个单词的长度 例如s"Good morning, champ! Youre going to rock this day" 分析思路: 遇到字符串问题&#xff0c;经常和列表结合使用来解决&#xff0c; 可以先用列表的.split()分割方法进行单词分割&#xff0c; 再…...

[红明谷CTF 2021]write_shell 1

目录 代码审计check()$_GET["action"] ?? "" 解题 代码审计 <?php error_reporting(0); highlight_file(__FILE__); function check($input){if(preg_match("/| |_|php|;|~|\\^|\\|eval|{|}/i",$input)){// if(preg_match("/| |_||p…...

【Go - sync.once】

sync.Once 是 Go 语言标准库中的一个结构体&#xff0c;它的作用是确保某个操作在全局范围内只被执行一次。这对于实现单例模式或需要一次性初始化资源的场景非常有用。 典型用法 sync.Once 提供了一个方法 Do(f func())&#xff0c;该方法接收一个没有参数和返回值的函数 f …...

Spark RPC框架详解

文章目录 前言Spark RPC模型概述RpcEndpointRpcEndpointRefRpcEnv 基于Netty的RPC实现NettyRpcEndpointRefNettyRpcEnv消息的发送消息的接收RpcEndpointRef的构造方式直接通过RpcEndpoint构造RpcEndpointRef通过消息发送RpcEndpointRef Endpoint的注册Dispatcher消息的投递消息…...

win10安装ElasticSearch7.x和分词插件

说明&#xff1a; 以下内容整理自网络&#xff0c;格式调整优化&#xff0c;更易阅读&#xff0c;希望能对需要的人有所帮助。 一 安装 Java环境 ElasticSearch使用Java开发的&#xff0c;依赖Java环境&#xff0c;安装 ElasticSearch 7.x 之前&#xff0c;需要先安装jdk-8。…...

Linux中,MySQL的用户管理

MySQL库中的表及其作用 user表 User表是MySQL中最重要的一个权限表&#xff0c;记录允许连接到服务器的帐号信息&#xff0c;里面的权限是全局级的。 db表和host表 db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作权限&#xff0c;决定用户…...

个人电脑网络安全 之 防浏览器和端口溢出攻击 和 权限对系统的重要性

防浏览器和端口溢出攻击 该如何防 很多人都不明白 我相信很多人只知道杀毒软件 却不知道网络防火墙 防火墙分两种 &#xff1a; 1、 病毒防火墙 也就是我们说的杀毒软件 2、 网络防火墙 这是用来防软件恶意通信的 使用防火墙 有两种 1、 半开式规则…...

美食聚焦 -- 仿大众点评项目技术难点总结

1 实现点赞功能显示哪些用户点赞过并安装时间顺序排序 使用sort_set 进行存储&#xff0c;把博客id作为key&#xff0c;用户id作为value&#xff0c;时间戳作为score 但存储成功之后还是没有成功按照时间顺序排名&#xff0c;因为sql语句&#xff0c;比如最后in&#xff08;5…...

拓扑图:揭示复杂系统背后的结构与逻辑

在现代软件开发和运维中,图形化的表示方式越来越重要。拓扑图,作为一种关键的可视化工具,不仅能够帮助我们理解系统的结构和组件间的关系,还能提升系统的可维护性和可扩展性。 什么是拓扑图? 拓扑图是一种展示系统或网络中各个节点(如服务器、交换机、数据库等)及其连…...

Java面试八股之什么是spring boot starter

什么是spring boot starter Spring Boot Starter是Spring Boot项目中的一个重要概念。它是一种依赖管理机制&#xff0c;用于简化Maven或Gradle配置文件中的依赖项声明。Spring Boot Starter提供了一组预定义的依赖关系&#xff0c;这些依赖关系被封装在一个单一的包中&#x…...

探究项目未能获得ASPICE 1、2级能力的原因及改进策略

项目整体未能获得ASPICE 1、2级能力的原因可能涉及多个方面&#xff0c;以下是基于参考文章中的信息和可能的情境进行的分析&#xff1a; 1.过程成熟度不足&#xff1a;ASPICE&#xff08;Automotive Software Process Improvement and Capability Determination&#xff09;是…...

WHAT - 不同 HTTP Methods 使用场景、使用方法和可能遇到的问题

目录 前言基本介绍具体介绍前置知识&#xff1a;幂等和非幂等幂等操作非幂等操作幂等性和非幂等性的应用场景总结 1. GET2. POST3. PUT4. PATCH1. 确保操作是幂等的2. 使用版本控制或条件更新3. 全量更新部分属性4. 使用特定操作指令5. 幂等标识符示例代码总结 5. DELETE6. HEA…...

Pytorch使用教学4-张量的索引

1 张量的符号索引 张量也是有序序列&#xff0c;我们可以根据每个元素在系统内的顺序位置&#xff0c;来找出特定的元素&#xff0c;也就是索引。 1.1 一维张量的索引 一维张量由零维张量构成 一维张量索引与Python中的索引一样是是从左到右&#xff0c;从0开始的&#xff…...

【Git多人协作开发】同一分支下的多人协作开发模式

目录 0.前言场景 1.开发者1☞完成准备工作&协作开发 1.1创建dev分支开发 1.2拉取远程dev分支至本地 1.3查看分支情况和分支联系情况 1.4创建本地dev分支且与远程dev分支建立联系 1.5在本地dev分支上开发file.txt 1.6推送push至远程仓库 2.开发者2☞完成准备工作&…...

Vue使用FullCalendar实现日历/周历/月历

Vue使用FullCalendar实现日历/周历/月历 需求背景&#xff1a;项目上遇到新需求&#xff0c;要求实现工单以日/周/月历形式展示。而且要求不同工单根据状态显示不同颜色&#xff0c;一个工单内部&#xff0c;需要以不同颜色显示三个阶段。 效果图 日历 周历 月历 安装插件…...