python 客户端 版本更新_PC客户端软件在线更新方案

本文介绍了如何使用Python和Flask框架实现PC客户端软件的版本更新方案。客户端使用C++/Qt,通过QNetworkAccessManager向后台发送请求获取最新版本信息。后台通过Flask提供API,查询数据库中的最新版本并返回给客户端。当有新版本时,客户端会下载并提示用户更新。
摘要由CSDN通过智能技术生成

好久没有写文章了,这次介绍一种简单的PC客户端软件升级方案,从客户端到后台实现都是亲自手撸代码实现,并且在实际项目中应用(一般本人介绍的技术方法或者方案都是在实际项目中真实应用,并且介绍的案例都是基于真实项目),话不多说,进入正题。

1 技术背景

PC客户端软件:这里的客户端软件是本人自己业余做的一款机器人控制软件,使用C++/Qt开发;

软件更新后台:使用Python语言开发,web框架采用Flask;

2 更新步骤

好吧,我承认我不会画图,我会认真学习的。但是图糙理不糙,更新过程中前后台的交互就如同上图所示,只需要两步:第1步是客户端软件向发送请求获取最新的版本信息;第2步是客户端软件根据第一步的结果来下载最新版的客户端软件。下面详细介绍这两个过程使用的技术和实现方法:

2.1 客户端发送请求获取最新版本信息

这是更新流程的第一步,我采取的方法是在客户端启动之后便发送一次http请求,根据预先定义好的接口(这里的接口下面介绍后台实现的时候介绍)请求向后台获取最新的版本信息(获取到的版本信息具体有哪些,在介绍后台接口实现的时候会详细介绍,这里最重要的信息主要包括两个:一个是版本号,一个是最新版软件的下载地址),然后将获取到的版本号跟当前软件的版本号进行比较,如果最新软件的版本号大于当前软件的版本号,则客户端弹框提示当前软件有新版,询问客户是否需要更新,如果更新,则客户端根据后台返回的下载地址进行下载。

2.1.1 如何发送请求获取最新版本信息

这里我定义的软件最新版本的后台api是http://domainname/api/software/check_version,这里的url中的domainname可以是后台域名也可以是ip:port的形式,在客户端软件中,我使用的http库是Qt的QNetworkAccessManager库,关于QNetworkAccessManager的用法这里不做过多介绍,Qt的文档里面很详细,下面是客户端软件中发出请求的一段代码:

QNetworkRequest req;

req.setUrl(QUrl::fromUserInput(QString("%1/api/software/check_version").arg(HsrCore::HSR_BASE_URL)));

m_app_controller_->httpMgr()->networkAccessMgr()->get(req);

上面代码里面networkAccessMgr()方法返回的是QNetworkAccessManager的实例,由于获取最新版本信息的接口是get请求,故只需要调用QNetworkAccessManager的get方法即可,QNetworkRequest是Qt用来封装请求地址,请求头,请求参数等,QNetworkReply是Qt用来封装请求的响应。

2.1.2 如何根据最新信息判断是否有新版本软件

发送请求之后,后台接收请求会查询数据库中最新的版本信息,然后封装成json格式返回,客户端接收到之后处理返回来的数据,还是拿一部分实际代码来说明吧:

QJsonObject jsonObj = QJsonDocument::fromJson(reqEntity.network_reply->readAll()).object();

int respCode = jsonObj.value("code").toInt();

if (respCode != hsr::API_RESP_OK) {

emit reqLatestVersionResponse(respCode, jsonObj.value("message").toString());

return;

}

m_soft_update_date_item_->updateFromJson(jsonObj.value("data").toObject());

emit reqLatestVersionResponse(respCode, jsonObj.value("

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值