qt 实现MVC Api控制器开发 web api接口-连载【5】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)

标题作者背景描述:

本人就职于外资IT企业,担任电商订单处理产品开发经理一职,领导过非常多次大小项目的开发工作,对电商平台订单处理流程非常熟悉。

公司专注鞋服行业相关软件开发和服务,公司规模100多人以上,在台北,广州,成都,上海,北京,国外等均有分公司。

为什么写此系列文章?

本人在学校至工作到现在十余年时间,使用.net C# 开发语言,结合在公司实际开发,和市场的需求中,NET.开发的商业企业级系统遇到的缺点有如下:

  1. 程序首次加载慢,因为虚拟机编译的原因。
  2. WINFORM界面开发不够炫丽,精美。
  3. WINFORM界面设计人员难找。
  4. 程序可以被反编译。
  5. 安装包过大,部署麻烦,framework.
  6. 跨平台不够好。

解决方案:

结合近年来前端设计的走向,最终选择了qt+vue+element UI+sqlite(数据库根据需要情况选择)

qt负责接口和硬件处理

sqlite做数据存储

vue+element UI 实现前端。

预览Demo

在这里插入图片描述

MVC 模型

在这里插入图片描述
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

Model(模型) - 模型代表一个存取数据的对象。它也可以带有逻辑,在数据变化时更新控制器。
View(视图) - 视图代表模型包含的数据的可视化。
Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

下载QtWebApp

描述:要实现web Api需要使用一个qt web app 框架。
下载QtWebApp,集成到项目中,这个库主要是实现http 协议,和 QT Web Api库支持。
下载方式 : https://download.csdn.net/download/m0_49654513/12741112

作用:对于单机版本,不需要用户安装iis 或 tomcat,简化了部署的难度。
QtWebApp目录结构如下:
在这里插入图片描述

解压QtWebApp

在这里插入图片描述

添加到解决方案

打开上一章节创建的解决方案:BitPos 。
在解决方案资源管理器,右键》添加》现有项目 ,如下:
在这里插入图片描述
把qtwebapp.vcxproj 添加现在项目 。
在这里插入图片描述
在这里插入图片描述

设置静态链接

选择QtWebApp ,右键》属性

在常规选项中修改sdk 版本,和平台工具集,配置类型,输出为静态库,如下:
在这里插入图片描述

设置QT版本

在qt project settings 选项中,修改 qt installation 为 我们上一节配置的qt版本,如下:
在这里插入图片描述

编译源码

编译源码,这里能够一次编译成功,如下图:
在这里插入图片描述

引用QtwebApp

点击BitPos项目,右键》添加》引用

在这里插入图片描述

在这里插入图片描述

添加包含目录

为BitPos添加 包含目录,因为后面会用QtWebApp的头文件。
选择BitPos 》属性》vc++目录》包含目录》输入QtWebApp 如下图:

在这里插入图片描述

修改BitPos静态链接

修改BitPos运行库为静态链接。
按上面的步骤,修改这2个项目的配置为release 模式,重复一次操作。否则release编译会报错。
在这里插入图片描述

实现mvc

接下来演示如何添加一个用户登入时密码验证的接口。
这个接口有2个参数,分别是user_code ,password
返回为json ,返回了用户代码和用户名称 ,分别是user_code,user_name 。
使用postman请求工具,测试和调试API,
请求描述如下图:
在这里插入图片描述

添加API 控制器

接下来进行实操:添加API 控制器 和登入接口Login的方法
新增 src 目录,然后在目录下创建 controller
如下图:
在这里插入图片描述

添加controller类

选中controller 右键》添加》Add qt class
输入类名:ApiController
如下图:
在这里插入图片描述
点add 如下图:
在这里插入图片描述
点击next:如下图
把Base class 修改为HttpRequestHandler
在这里插入图片描述

实现模型Login 动作

ApiController.h添加Login 函数,
如下:

	//action 登入接口。http://localhost:5050/vue-element-admin/api/login
	Q_INVOKABLE  void Login(HttpRequest & request, HttpResponse & response);

在ApiController.cpp添加Login 实现,实现了用户和密码的简单验证,并返回用户结果,如下:

Q_INVOKABLE void ApiController::Login(HttpRequest & request, HttpResponse & response)
{
   
	//request.

	//获取post请求的表单 。
	QMultiMap<QByteArray, QByteArray> forms = request.getParameterMap();
	//获取用户提交表单中的user_code 
	auto usercode = forms.value("user_code").trimmed();
	if (usercode.isEmpty())
	{
   
		Result("用户代码不能为空!", 1, response);
		return;
	}
	//获取用户提交表单中的password 
	auto password = forms.value("password").trimmed();
	if (password.isEmpty())
	{
   
		Result("密码不能为空!", 1, response);
		return;
	}
	//二次判断
	QByteArray hash = QCryptographicHash::hash(password, QCryptographicHash::Algorithm::Sha256).toBase64();

	//验证用户代码和密码。

	QJsonObject object
	{
   
		{
   "code", 0},
		{
   "msg", QJsonValue::Null}
	};
	QJsonObject user
	{
   
		{
   "user_code", "admin"},
		{
   "user_name", "admin"}
	};
	object.insert("user", user);

	QJsonDocument usermodel(object);

	//返回用户信息。
	QByteArray body = usermodel.toJson(QJsonDocument::JsonFormat::Indented);

	response.write(body, true);
}

最后贴出这2个类的源码分别是:
ApiController.h的代码如下:

#pragma once
//解决中文乱码问题。
#pragma execution_character_set("utf-8")
#include <httpserver/httprequesthandler.h>

using namespace stefanfrings;

//控制器 http://localhost:5050/vue-element-admin/api
class ApiController :
	public HttpRequestHandler
{
   

	Q_OBJECT 
public:
	Q_INVOKABLE ApiController(const ApiController & v
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值