首先需要在微信公众平台或开放平台中创建应用,并获取到AppID和AppSecret。
在pbootcms中创建一个自定义模板页面(例如:wechat_login.html),并在该页面中添加以下代码,用于生成微信扫码登录的二维码:
<!-- 引入jquery库 -->
<script src="http://cdn.bootcss.com/jquery/3.5.1/jquery.min.js"></script>
<!-- 生成二维码的canvas -->
<div id="qrcode"></div>
<!-- 用于轮询检查扫码状态 -->
<div id="check_login"></div>
<script>
$(function(){
// 生成二维码
var url = "http://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";
url = url.replace("APPID", "你的AppID");
url = url.replace("REDIRECT_URI", encodeURIComponent("http://你的域名/wechat_callback.php"));
$('#qrcode').qrcode({width: 200,height: 200,text: url});
// 轮询检查扫码状态
setInterval(function(){
$.ajax({
url: "http://你的域名/check_login.php",
dataType: "json",
success: function(data){
if(data.code == 0){
alert("登录成功!");
window.location.reload();
}
}
});
}, 3000);
});
</script>
<?php
// 获取微信授权码
$code = $_GET['code'];
// 获取access_token和openid
$url = "http://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=".urlencode($code)."&grant_type=authorization_code";
$url = str_replace("APPID", "你的AppID", $url);
$url = str_replace("APPSECRET", "你的AppSecret", $url);
$json = file_get_contents($url);
$data = json_decode($json, true);
$access_token = $data['access_token'];
$openid = $data['openid'];
// 将access_token和openid存储在session中
session_start();
$_SESSION['access_token'] = $access_token;
$_SESSION['openid'] = $openid;
// 跳转回原页面
header('Location: http://你的域名/wechat_login.html');
<?php
// 获取session中的access_token和openid
session_start();
$access_token = $_SESSION['access_token'];
$openid = $_SESSION['openid'];
// 检查access_token和openid是否存在
if(empty($access_token) || empty($openid)){
echo json_encode(array('code' => -1, 'msg' => '未登录'));
exit();
}
// 检查用户是否已经扫码并确认登录
$url = "http://api.weixin.qq.com/sns/auth?access_token=".urlencode($access_token)."&openid=".urlencode($openid);
$json = file_get_contents($url);
$data = json_decode($json, true);
if($data['errcode'] == 0){
echo json_encode(array('code' => 0, 'msg' => '已登录'));
exit();
} else {
echo json_encode(array('code' => 1, 'msg' => '未确认登录'));
exit();
}
完成以上步骤后,用户在访问wechat_login.html页面时,将会看到一个二维码,用户可以使用微信扫描二维码进行登录。同时,check_login.php文件会定时检查用户的登录状态,并在用户确认登录后,将access_token和openid存储在session中,以便于后续的操作。
大家好,又见面了,我是你们的朋友全栈君。文章目录react路由react路由的基本使用常用组件说明BrowserRouter和HashRouter组件Link组件Route组件NavLink组件Switch组件Routes组件Redirect组件from属性和to属性exactstrict路由组件和一般组件路由的执行过程编程式导航withRouter默认路由匹配模式模糊匹配模式精确匹配push和replace模式嵌套路由向路由组件传递参数params参数search参数state参数编程式导航传递参数react路由现代的前端应用大多都是SPA(单页应用程序),也就是只有一个HTML页面的应用程序。因为它的用户体验更好、对服务器的压力更小,所以更受欢迎。为了有效的使用单个页面来管理原来多页面的功能,前端路由应运而生前端路由的功能:让用户从一个视图(页面)导航到另一个视图(页面),前端路由是一套映射规则,在Reat中是URL路径与组件的对应关系,使用React路由简单来说,就是配置路径和组件(配对)。 文档:https://react-router.docschina.org/web/
点云处理算法整理(超详细教程)目录一.线性回归_最小二乘法、梯度下降法 二.线性回归_最小二乘法、RANSAC算法 三.最近点迭代_ICP算法 四.常见三角网格划分_voronoi图和Delaunay三角剖分 五.PCL曲面聚类分割算法优缺点分析 六.区域增长算法、欧几里得聚类算法 七.PCLAABB和OBB包围盒算法 目录 一.线性回归_最小二乘法、梯度下降法https://www.cnblogs.com/armysheng/p/3422923.html 最小二乘法(适用范围:线性回归方程:直线、圆、椭圆;) 最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达最小二乘法与梯度下降法:梯度下降法可以使用tensorflow模块 最小二乘法跟梯度下降法都是通过求导来求损失函数的最小值,那它们有什么区别呢。 相同 1.本质相同:两种方法都是在给定已知数据(in
一.ovs从源码编译安装:安装依赖项:#aptinstallmake #aptinstallgcc #aptinstallbuild-essential #aptinstalllibssl-dev #aptinstalllibcap-ng-dev #aptinstallpython2.7 #aptinstallpython-pip #pipinstallsix #aptinstallautoconf #aptinstallautomake #aptinstalllibtool复制下载源码包#aptinstallgit #gitclonehttps://github.com/openvswitch/ovs.git(下载的git工程目录为~/ovs)复制生成配置文件#./boot.sh(在ovs工程根目录下)复制配置#./configure-with-linux=/lib/modules/$(uname-r)/build复制编译#make #makeinstall #makemodules_install #config_file="/etc/depmod.d/openvs
let关键字特点var关键字let关键字变量提升√×作用域没有块级作用域,是函数作用域有块级作用域重复声明√×重新赋值√√变量提升 console.log(age);letage=38;作用域 for(vari=0;i<10;i++){}console.log(i);for(letn=0;i<10;i++){}console.log(n); 图中可对比看出,如果用var声明,在循环外部还是可以使用i变量;但用let声明变量,循环外部不可以使用n变量不可重复声明 letnum2=10;letnum2=20;console.log("num2:",num2);重新赋值 letnum2=10;num2=20;console.log("num2:",num2);const关键字使用场景 一些不会变化的值,比如圆周率PI大事件项目中,保存基地址没有变量提升 有块级作用域 不能重复声明 不能重新赋值(声明必须要初始化) 解构赋值对象解构取对象中属性的值,赋值给变量。例如对于如下对象来说,在ES5与ES6中将对象赋值于变量的方式letobj={ n
序本文主要研究一下dubbo的ServiceBeanExportedEventServiceBeanExportedEventdubbo-2.7.3/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/event/ServiceBeanExportedEvent.javapublicclassServiceBeanExportedEventextendsApplicationEvent{ /** *CreateanewApplicationEvent. * *@paramserviceBean{@linkServiceBean}bean */ publicServiceBeanExportedEvent(ServiceBeanserviceBean){ super(serviceBean); } /** *Get{@linkServiceBean}instance * *@returnnon-null */ publicServiceBeangetServiceB
策略模式的定义定义:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换通俗的说,就是对一个接口下的一组算法进行封装其类图如下:其中三个角色说明:Strategy抽象策略角色:策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性ConcreteStrategy具体策略角色:实现抽象策略中的操作,该类含有具体的算法.Context封装角色:也叫上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化策略模式的重点就是封装角色,它借用了代理模式的思路,差别就是策略模式的封装角色和被封装的策略类不用是同一个接口,如果是同一个接口就成了代理模式代码如下:抽象的策略角色:具体的策略角色:封装角色:场景类:策略模式的应用策略模式的优点:算法可以自由切换.只要实现抽象策略,它就成为策略家族的一个成员,通过封装角色对其进行封装,保证对外提供"可自由切换"的策略避免使用多重条件判断.如果没有策略模式,一个策略家族有5个策略算法,一会要用A,一会要用B,使用多重的条件语句吗?多重条件语句不易维护,而且出错的概率大大增强.使用策略模
前言前面我有几章是专门设置怎么读取视频操作的文章《C++OpenCV播放视频及调用摄像头显示》,最近学完了一些形态学的基础操作及特征提取后,我们开始重新学习视频一操作,今天我们先来研究一下背景消除建模BSM。背景消除建模(BSM)BS的算法里面一般分为两种图像分割(GMM-高斯混合模型)机器学习(KNN-K个最近邻)相关APIBackgroundSubtractor BackgroundSubtractorMOG2BackgroundSubtractorKNN代码演示我们再新建一个项目名为opencv--video1,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法我们直接加载了一个本地的视频,下面这个就是本地加载的原视频,从视频中可以看出我的镜头是没动了,然后手就出来了。 今天我们来先看看高斯混合模型的算法BackgroundSubtractorMOG2核心代码:贴上完整的代码:运行中的截图: 接下来我们看看整个视频的运行效果:注:如果我们录的镜头在不停的移动的话,这个背景检测效果就基本作用不大了,所以这个还是要求必须是固定的镜头效
11月8日,由工业和信息化部主办,世界知识产权组织联合主办的人工智能论坛在世界互联网大会期间召开。工业和信息化部副部长陈肇雄、世界知识产权组织副总干事王彬颖出席论坛并致辞。阿联酋人工智能部部长奥拉马,中国工程院院士邬贺铨,中国工程院院士、浪潮集团首席科学家王恩东,百度公司创始人、董事长兼CEO李彦宏,世界知识产权组织高级AI专家米夏尔·兹姆斯基,首都医科大学附属北京同仁医院副院长魏文斌,新思科技高级副总裁阿科罗特在内的专家学者在论坛发表主题演讲。王恩东院士以《计算力,智慧时代生产力》为题,分享了对于当下AI产业发展的趋势洞察。△中国工程院院士、浪潮集团首席科学家王恩东计算力是生产力过去10年,互联网一直是全球经济最大的亮点。10年前,全球市值TOP8排行榜中只有一家互联网企业,传统企业占据主流;而在2018年8月全球市值榜单中,TOP8的公司分别是苹果、亚马逊、Alphabet、微软、伯克希尔·哈撒威、Facebook、阿里巴巴和腾讯,只有一家非互联网企业伯克希尔.哈撒威入榜。这些高市值的互联网企业在服务器采购投入上也同样位居前列。互联网经济的发展不仅体现在互联网产业,也体现在众多传统
image懂的人肯定看到标题就明白了,这就是木马程序,从第一句话就看得出来。注册表是个什么东西?这个是黑客、网络安全工程师必须精通的一项技术,所有的木马、病毒基本都是通过电脑注册表实现的!所以,你就知道注册表是对电脑多重要的东西了,可以理解为核心吧。image利用python写了一个远程监控的程序,主要功能有:1.用邮件控制所有功能2.可以对屏幕截图,屏幕截图发送到邮箱3.可以用摄像头获取图片并上传4.开机自启动以下是实现的Python源代码以及注释:imageimage注意:image3.当监听到screen时,开始屏幕截图并发送到邮箱,由于监听的是最新的邮件,当图片发送带邮箱时,获取的邮件主题不是screen了,应该会停止截图,最后只会截取一张图片,继续保持监听状态。但实际由于网络的原因,发送的邮件会有延迟,所以,实际截取的图片会有很多张image把电脑摄像头对准你想要看到的画面,然后这样也可以实现远程监视器的效果,但是这样不能实现电脑桌面的监控。因为你的程序是设置在你自己的电脑上,但是这样比较安全。我有一个微信公众号,经常会分享一些python技术相关的干货;如果你喜欢我的分享,
中国通常被认为是全球供应链上的底端,似乎创新与其无关,但是在这8大行业的创新,中国领先于世界其他地区。中国一直被认为是世界工厂,全球有90%以上的个人电脑、80%的空调和74%的太阳能电池和70%的手机来自于中国。中国通常被认为是全球供应链上的底端,可能是最无趣的制造和装配层,似乎创新与其无关——但是在这8大行业的创新,中国领先于世界其他地区。1.电子商务阿里巴巴在美国成功上市后,美国人对中国电子商务市场的情况更了解了。阿里巴巴在eBay的商业模式上又发展了很多有趣的方式,不过阿里巴巴最有创新性的地方在于它让电子商务变得更简单和普及:跨越式地改变了中国的传统零售业,在实体店开到较落后的乡村地区以前,把现代消费方式带了过去。 那些不在主要大城市的中国人很快学会了在网上购物,根据KPMG的数据调查显示,来自一线城市以外的电子商务需求在2009至2012年增长了70%以上,而如果没有下面这些行业,恐怕都不能实现了。 2.快递业大多数时候,中国的快递很灵活,价格便宜且快速,以至于上海的朋友会给同城的朋友寄些新鲜出炉的曲奇饼干。 低价高质的服务源于繁荣的电子商务和中国的低价劳动力,在越来越多
公共互联网网络安全突发事件应急预案 1.总则1.1编制目的1.2编制依据1.3适用范围1.4工作原则2.组织体系2.1领导机构与职责2.2办事机构与职责2.3其他相关单位职责3.事件分级3.1特别重大事件3.2重大事件3.3较大事件3.4一般事件4.监测预警4.1事件监测4.2预警监测4.3预警分级4.4预警发布4.5预警响应4.6预警解除5.应急处置5.1响应分级5.2先行处置5.3启动响应5.4事态跟踪5.5决策部署5.6结束响应6.事后总结6.1调查评估6.2奖惩问责7.预防与应急准备7.1预防保护7.2应急演练7.3宣传培训7.4手段建设7.5工具配备8.保障措施8.1落实责任8.2经费保障8.3队伍建设8.4社会力量8.5国际合作9.附则9.1预案管理9.2预案解释9.3预案实施时间1.总则1.1编制目的建立健全公共互联网网络安全突发事件应急组织体系和工作机制,提高公共互联网网络安全突发事件综合应对能力,确保及时有效地控制、减轻和消除公共互联网网络安全突发事件造成的社会危害和损失,保证公共互联网持续稳定运行和数据安全,维护国家网络空间安全,保障经济运行和社会秩序。1.2编制依
今天下午的时候,有一位开发同事找我,说有一个技术问题想请教一下。 当然正如他所说,这个问题比较奇怪,而且已经影响了他的测试流程,他说有一个表查看对应的表空间但是显示为空,所以插入不了数据。我们之前做过一次数据迁移,他想让我帮忙看看,能不能修改一下表空间的设置。 好了,问题到这里,看起来已经比较明显了,一个表对应的表空间是必须有的属性,所以应该不会存在为空的情况,而插入不了数据,应该和这个表空间设置没有关系,另有其他的原因,而且他说这个表里面有700多万的数据,现在只剩下90万左右,数据是怎么被清理了? 到了这个时候,听起来有了一些头绪,当然我在19楼,他在3楼,我是不大愿意来来回回跑动,如果一两句话能解决的事情,或者远程简单支持就能搞定,就不用那么麻烦了,所以简单聊了下,就开启了远程协助,他给我复现了问题,当然是通过plsqldev来复现的,我看到他在表对象右键属性,弹出的窗口里确实显示表空间为空,当然到了这里,我就明白了问题的原因,这肯定是个分区表。 当然我是运行了一条sql,select*fromuser_tab_partitionswheretable_name='CL
元旦将至,2017年企业在构建安全体系时主要考虑哪些问题呢?FreeBuf带你回顾企业安全应对指南中所调查的2017企业年度安全关键词!在进行问卷调查之后,我们可以通过观察谷歌趋势,得到以下热点词汇的搜索态势。下面我们就来详细解释一下这些2017年度企业安全的热点词汇。2017年网络安全行业及企业安全发展最新趋势是怎样的?2017年中对于企业而言,最大的安全威胁有哪些?安全事件发生之前,企业如何预防和应对?安全事件发生之时,企业的当务之急又是什么?纵观繁杂的安全产品,有哪些值得关注?UBAUBA(用户行为分析)是指帮助企业或组织发现内部威胁,目标攻击和金融欺诈。利用UBA技术解决内部威胁是一种新的手段方法,该技术发展到今天已经具备了能够对非结构化数据进行分析能力,拥有一定的预测能力,已经开始应用到内部威胁和目标攻击防护中去,而不再仅仅局限于调查分析了。UEBAUEBA将用户活动和其他部分,比如受管理终端,非受管理终端,应用(包括云端,移动端和其他的本地应用程序),网络和内部威胁。对比UEA,UEBA不仅可以防范内部的威胁,还可以防范外部的威胁,从而保护数据。SDSSoftwareDef
目录方法一:通过getJSON实现方法二:使用原生js实现方法三:使用AJAX实现在vue中实现获取json格式文件并编辑可能出现的问题 方法一:通过getJSON实现 getJSON是jquery提供的读取json格式文件的方法 首先我们将html中引入jquery,可以通过百度CDN引入,代码如下: <scriptsrc="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> 复制 然后就可以在script中使用getJSON,getJSON代码格式如下: $.getJSON("userinfo.json",function(data){ //data代表读取到的json中的数据 }); 复制 参考示例: 第一步:创建一个json格式文件,取名为userinfo.json [ { "name":"张三", "sex":"男" }, { "name":"李四", "sex":"男" }, { "name":"王五", "sex":"女" } ]
1、双击,安装,一直next向下 2、apache配置 增加监听接口 Listen89 Listen8888 Listen8889 复制 修改项目目录 DocumentRoot"E:\www" <Directory"E:\www"> # #PossiblevaluesfortheOptionsdirectiveare"None","All", #oranycombinationof: #IndexesIncludesFollowSymLinksSymLinksifOwnerMatchExecCGIMultiViews # #Notethat"MultiViews"mustbenamed*explicitly*---"OptionsAll" #doesn'tgiveittoyou. # #TheOptionsdirectiveisbothcomp
微信开发者工具,使用TS(TypeScript),进行编译预览时,出现Unexpectedtoken:punc(.)错误。 百度搜索都是和VUE有关的,没有参照价值。 对相关代码进行了排除法。定位到一行代码: cell.value=cell.list?.findIndex(f=>f.name===cell.value); 复制 怀疑是对?支持的不完善导致的,改为: if(cell.list){ cell.value=cell.list.findIndex(f=>f.name===cell.value); } 复制 问题解决! 附记:在茫茫的信息海洋中,遇到就是有缘,期待回复交流,为缘分留下痕迹……
一、判断 语法 ifcondition1 then command1 elifcondition1 then command2 else command3 fi复制 合并成一行 if[condition1];thencommand1;elif[condition1];thencommand2;elsecommand3;fi复制 demo value=3;if[$value==1];thenecho"if";elif[$value==2];thenecho"elif";elseecho"else";fi复制 二、循环 for循环 数值遍历 #!/bin/bash for((i=1;i<=10;i++)); do echo$i; done复制 矩阵index遍历 #!/bin/bash foriin{1..10} do echo$i done awk'BEGIN{for(i=1;i<=10;i++)printi}'复制 列表遍历 #!/bin/bash list="aabbccdd" foriin$list; do echo$iis
JDK动态代理实现原理思路: 1.声明一段源码,这段源码动态生成我们的动态代理; //1、声明一段源码,动态产生代理 //windows系统中的回车换行符\r\n Stringrt="\r\n"; StringmethodStr=""; for(Methodm:infce.getMethods()){ methodStr+="@Override"+rt+ "publicvoid"+m.getName()+"(){"++ "try{"+rt+ "Methodmd="+infce.getName+".class.getMethod(\""+m.getName()+"\""+rt+ "h.invoke(this,md);"+rt+ "}catch(Exceptione){e.printStackTra();}"+rt+ "}"; } Stringstr= "packagecom.imooc.proxy;"+rt+ "importjava.lang.reflect.Method;"+rt+ "importcom.imooc.proxy.InvocationHandler+rt+ "publi
最近学习使用Hugo构建静态网站。安装主题时,接触到gitsubmodule这个命令,踩了些坑,总结一下。 子模块与父模块如何同步更新 子模块是一个单独的项目,commitpush等操作需要在子模块自己的repo目录下操作。父项目的操作与子模块无关。父项目gitadd无法添加子模块的changes,当然也就无法commitpush。 子模块版本升级后,父项目不会自动升级,仍然停留在对之前版本的引用。以下命令可以查看父模块当前使用子模块的哪个版本: >gitsubmodulestatus f0dc1cf84d7c47dc1625e956f07b37b6c238a3dcthemes/hugo-theme-stack(v3.8.0-4-gf0dc1cf) 复制 子模块修改后,父模块虽然无法gitadd/commit/push,但是gitstatus却可以显示: >gitstatus Onbranchmaster Yourbranchisuptodatewith'origin/master'. Changesnotstagedforcommit: (use"gitadd..."t
更换镜像仓库后,在deployment.yaml中将image的仓库地址修改后,更新deployment,pod一直在ImagePullBackOff状态,describe查看pod信息,会提示是镜像下载失败,但是在宿主机上手动dockerpull下载镜像又是能正常下载的,且镜像手动下载后,pod就会变成running状态 解决办法 1.反复查看deployment.yaml文件之后发现,是imagePullSecrets参数控制了该deployment去连接哪个镜像仓库的 2.通过命令去查看私钥(zl-regsecret)指向的镜像仓库地址什么 kubectlgetsecretszl-regsecret-ntest-env--output="jsonpath={.data.\.dockerconfigjson}"|base64-d复制 3.查看的镜像仓库和现使用的仓库不是同一个,遂新配置一个私钥(zl-regsecret-new) kubectlcreatesecretdocker-regi