当前位置:   article > 正文

鸿蒙前后端互联实现接收发送数据+MySQL数据库(简单示例)_鸿蒙开发前端如何链接后端

鸿蒙开发前端如何链接后端

准备工作

  • Visual Studio Code
  • mySQL+DBeaver(已连接,具体连接可参考http://t.csdnimg.cn/7U7Oj)另外不用可视化工具DBeaver,可下载vscode插件mysql连接MySQL
  • DevEco Studio

python连接数据库

安装(终端运行安装)
  1. pip install pymysql==1.0.2
  2. pip install flask
  3. pip install requests
  4. pip install flask_cors
直接看代码(python后端代码)

使用flask创建了一个应用实例,包含两个路由,一个用于发送到前端,一个用于接收前端的数据。

  1. #导入需要的模块
  2. #用于构建 Web 应用程序。这段代码中导入了 Flask、request 和 jsonify,其中 Flask 是主要的模块,
  3. #request 用于处理 HTTP 请求对象,
  4. import json
  5. import logging
  6. from flask import Flask, request, jsonify
  7. from flask_cors import CORS
  8. #用于连接和操作 MySQL 数据库。通过这个库,在 Python 程序中执行 SQL 语句、插入、更新和删除数据等操作。
  9. import pymysql
  10. #用于发送 HTTP 请求并处理响应
  11. import requests
  12. # 连接数据库
  13. conn = pymysql.connect(host='127.0.0.1', # 连接名称,默认127.0.0.1
  14. user='root', # 用户名,默认为root
  15. passwd='123456', # 密码,默认为123456
  16. port=3306, # 端口,默认为3306
  17. db='weldingdata', # 所创建的数据库名称**************************************************************************
  18. charset='utf8') # 字符编码
  19. # 生成游标对象
  20. cur_1 = conn.cursor()
  21. cur_2 = conn.cursor()
  22. cur_3 = conn.cursor()
  23. # SQL语句*************************************************************table name******************************表名
  24. sql_1 = "select voltage from `datas`"
  25. sql_2="select electricity from `datas`"
  26. sql_3="select pressure from `datas`"
  27. # 执行SQL语句,并将结果保存到游标对象中使用 cur.execute(sql) 方法来执行该语句,并将查询结果保存到游标对象 cur 中,以便后续处理或输出
  28. cur_1.execute(sql_1)
  29. cur_2.execute(sql_2)
  30. cur_3.execute(sql_3)
  31. # 通过fetchall方法获得数据
  32. data_1 = cur_1.fetchall()
  33. data_2 = cur_2.fetchall()
  34. data_3 = cur_3.fetchall()
  35. #打印数据
  36. for item in data_1:
  37. print(item)
  38. # 关闭游标
  39. cur_1.close()
  40. cur_2.close()
  41. cur_3.close()
  42. # 关闭连接
  43. conn.close()
  44. # 导入Flask模块,创建一个应用实例,用于发送 HTTP 请求并处理响应
  45. #创建了一个名为 app 的 Flask 应用实例
  46. app = Flask(__name__)
  47. # 允许跨域访问
  48. CORS(app, resources={r"/*": {"origins": "*"}})
  49. # 设置日志
  50. logging.basicConfig(level=logging.DEBUG)
  51. logger = logging.getLogger(__name__)
  52. # 使用 @app.route 装饰器来定义了一个路由,指定了 /api/users 这个端点接收 GET 请求
  53. # 处理 HTTP GET 请求,向前端发送数据
  54. @app.route('/api/users', methods=['GET'])
  55. def get_data():
  56. # 将元组转换为列表,并将所有元素转换为字符串
  57. result = [list(map(str, item)) for item in data_1]
  58. # 将列表转换为JSON格式
  59. json_result = json.dumps(result)
  60. # 将JSON数据发送到指定URL
  61. return jsonify(json_result)
  62. #测试地址:http://127.0.0.1:5000/api/users
  63. # 处理前端发送的数据,例如插入到数据库
  64. @app.route('/submit-fault', methods=['POST'])
  65. def submit_fault():
  66. data = request.json
  67. process_data(data) # 处理数据的函数
  68. return jsonify({'message': 'Fault information submitted successfully.'})
  69. def process_data(data):
  70. print(data)
  71. return
  72. #http://127.0.0.1:5000/submit-fault
  73. # 启动Flask应用
  74. if __name__ == '__main__':
  75. app.run(debug=True)
数据库中的数据

数据库名为weldingdata,表名为data,数据如图所示(这里我直接用了vscode插件,用DBeaver也一样,只要连接上了就行)

运行结果

python终端(运行成功,大家有需要可自行执行其他sql语句并对代码进行修改得到自己想要的数据),这里我只让它输出了voltage这列的所有数据。

指定的url地址界面,可以看到自己发送的数据。

连接鸿蒙前端

现在数据已经可以从后端发送到指定的url了,接下来就是前端通过网络请求拿到这个地址的数据。

 module.json5配置

首先配置网络权限。插入(在module后插入就ok了)

  1. requestPermissions:[
  2. {
  3. name: "ohos.permission.INTERNET"
  4. }
  5. ] ,
鸿蒙前端index代码示例
  1. import http from '@ohos.net.http';
  2. @Preview
  3. @Entry
  4. @Component
  5. struct Index {
  6. @State message: string = 'Demo'
  7. @State numArr:number[]=[]
  8. transmit_data(){
  9. let httpRequest_transmit = http.createHttp();
  10. let dataToSend = { "树深时见鹿":"溪午不闻钟","南风知我意":"吹梦到西洲","与君初相识":"犹如故人归",};
  11. httpRequest_transmit.request(
  12. "http://127.0.0.1:5000/submit-fault",
  13. {
  14. method:http.RequestMethod.POST,
  15. header:{"Content-Type": "application/json"},
  16. // 将数据转换为JSON字符串
  17. extraData: JSON.stringify(dataToSend)
  18. },
  19. (err, data) => {
  20. if (!err) {
  21. // 处理响应
  22. console.log("Data sent successfully");
  23. } else {
  24. // 错误处理
  25. console.log("Failed to send data");
  26. }
  27. }
  28. );
  29. }
  30. HTTP() {
  31. ///创建HTTP请求对象
  32. let httpRequest = http.createHttp();
  33. httpRequest.request(
  34. // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要后端定义
  35. "http://127.0.0.1:5000/api/users", //后端定义的url地址
  36. {
  37. method: http.RequestMethod.GET, //默认为GET方法
  38. //定义请求头,这里设置Content-Type为application/json,表示请求体内容的数据类型为JSON
  39. header: { 'Content-Type': 'application/json' },
  40. //设置读取超时时间为60000毫秒,即60秒 。
  41. readTimeout: 60000,
  42. //设置连接超时时间为60000毫秒,即60秒。
  43. connectTimeout: 60000,
  44. },
  45. (err, data) => {
  46. if (!err) {
  47. //处理data,将得到的json数据格式转为字符串存入result
  48. let result = data.result.toString()
  49. console.log(result)
  50. //将result转为数组存入arr
  51. let arr = JSON.parse(result)
  52. console.info(arr)
  53. //使用正则表达式匹配 [ 和 ] 和""并去除
  54. let newarr = arr.replace(/[\[\]"]+/g, '');
  55. console.info(newarr)
  56. // 将处理后的字符串按照逗号分隔成数组,并转换为数字
  57. this.numArr = newarr.split(',').map(Number);;
  58. console.log(this.numArr.toString()); // [170, 170, 220, 200, 140, 160, 70, 100, 90, 150]
  59. console.info(this.numArr[0].toString())//打印第一个数据
  60. } else {
  61. //输出错误信息
  62. console.info('error:' + JSON.stringify(err));
  63. //销毁
  64. httpRequest.destroy();
  65. }
  66. })
  67. }
  68. build() {
  69. Column() {
  70. Column() {
  71. Text(this.message)
  72. .fontSize(30)
  73. .fontWeight(FontWeight.Bold)
  74. .margin({ bottom: 20 ,top:20})
  75. // Text()
  76. // .fontSize(22)
  77. // .fontColor('#ffc318d0')
  78. // .margin({bottom:50})
  79. Button('数字传入')
  80. .backgroundColor('#ff228828')
  81. .width(200)
  82. .height(60)
  83. .margin({top:50,bottom:50})
  84. .onClick(() => {
  85. this.HTTP()
  86. })
  87. Button('信息传出')
  88. .backgroundColor('#ff228828')
  89. .width(200)
  90. .height(60)
  91. .onClick(() => {
  92. this.transmit_data()
  93. })
  94. }.width('100%')
  95. .height(300)
  96. }
  97. .height('100%')
  98. .width('100%')
  99. }
  100. }

 结果测试

测试页面。

 后端发送,前端接收(点击数字传入)

可以看到数据已经转换成数组存入,我这里将它在控制台打印出来了。后续可以对这些数据操作。

 前端发送,后端接收(点击信息传出)

可以看到控制台输出Data sent successfully,说明数据发送成功了。

其中第十行代码是我们定义要发送的数据。

 我们返回到后端查看数据。可以看到数据已经成功发送过来了。

后续我们可以进行对数据的处理,包括插入数据库当中。

下面是一个插入数据库的简单示例。

前面代码不变,为了简化,我只发送了一组数据,数据如下 。

let dataToSend = { "数字":"2"};

首先需要在数据库先创建一个表来存储要接收的数据。

例如我这里,还用之前的数据库,只需创建一个number_data的表,新建一个number列。

后端的代码部分

  1. # 处理前端发送的数据,插入到数据库
  2. @app.route('/submit-fault', methods=['POST'])
  3. def submit_fault():
  4. data = request.json
  5. process_data(data) # 处理数据的函数
  6. return jsonify({'message': 'Fault information submitted successfully.'})
  7. def process_data(data):
  8. try:
  9. # 连接数据库
  10. conn = pymysql.connect(host='127.0.0.1', user='root', passwd='180805Wmy', port=3306, db='weldingdata', charset='utf8')
  11. # 生成游标对象
  12. cur = conn.cursor()
  13. # 插入数据的SQL语句
  14. #将数据插入到number_data表中的(number)列中
  15. sql = "INSERT INTO number_data (number) VALUES (%s)"
  16. # 从前端发送的数据中获取值
  17. #从 "数字" 中获取值 "2"
  18. number= data.get('数字')
  19. # 执行SQL语句,插入数据
  20. cur.execute(sql, (number))
  21. # 提交事务
  22. conn.commit()
  23. # 关闭游标和连接
  24. cur.close()
  25. conn.close()
  26. except pymysql.Error as e:
  27. # 打印错误信息
  28. print(f"Error {e.args[0]}: {e.args[1]}")
  29. # 回滚事务
  30. conn.rollback()
  31. except Exception as e:
  32. # 打印其他异常信息
  33. print(f"An error occurred: {e}")
  34. return

跟之前步骤一样,只需点击信息传出按钮。

数据就成功存入到数据库中了。

遇到的问题

数据的处理(已解决)
  • 一开始jiexijson数据时发现无法解析成想要的格式,因为是只想要数据库中的那一串数字,后来干脆用正则表达式处理字符串,最后把它放到数组里。
  • 下面就是具体操作。如果有其它办法亦可。
    1. //处理data,将得到的json数据格式转为字符串存入result
    2. let result = data.result.toString()
    3. console.log(result)
    4. //将result转为数组存入arr
    5. let arr = JSON.parse(result)
    6. console.info(arr)
    7. //使用正则表达式匹配 [ 和 ] 和""并去除
    8. let newarr = arr.replace(/[\[\]"]+/g, '');
    9. console.info(newarr)
    10. // 将处理后的字符串按照逗号分隔成数组,并转换为数字
    11. this.numArr = newarr.split(',').map(Number);;

 问题收集

大家可将过程中自己遇到的所有问题展示出来,以便于大家学习改进。如果更好的方法或者简单直接的方式请联系我。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/867447
推荐阅读
相关标签
  

闽ICP备14008679号