From 0d080a38ff440cf49977e3302e59e01b17c39285 Mon Sep 17 00:00:00 2001 From: shuike Date: Tue, 9 Dec 2025 09:28:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 25c859cf-e15d-458d-82e9-81039c49f9ed.png | Bin 0 -> 36603 bytes 7406b499-a8cb-4b9f-ad15-45558dd1602b.png | Bin 0 -> 18836 bytes all_server_open(云).py | 39 +++++++++++ db_con.py | 56 ++++++++++++++++ example_info_add.py | 73 ++++++++++++++++++++ user_add.py | 82 +++++++++++++++++++++++ 6 files changed, 250 insertions(+) create mode 100755 25c859cf-e15d-458d-82e9-81039c49f9ed.png create mode 100755 7406b499-a8cb-4b9f-ad15-45558dd1602b.png create mode 100755 all_server_open(云).py create mode 100755 db_con.py create mode 100755 example_info_add.py create mode 100755 user_add.py diff --git a/25c859cf-e15d-458d-82e9-81039c49f9ed.png b/25c859cf-e15d-458d-82e9-81039c49f9ed.png new file mode 100755 index 0000000000000000000000000000000000000000..fee1273b3c1778bcd70c8a954e771c20bb2500a1 GIT binary patch literal 36603 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 ZfAUkcHm}~D?z0hOsi&)-%Q~loCIDI5)eHat literal 0 HcmV?d00001 diff --git a/7406b499-a8cb-4b9f-ad15-45558dd1602b.png b/7406b499-a8cb-4b9f-ad15-45558dd1602b.png new file mode 100755 index 0000000000000000000000000000000000000000..fba41ce53e769f6cba5353b4021edcfa0bd36524 GIT binary patch literal 18836 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 literal 0 HcmV?d00001 diff --git a/all_server_open(云).py b/all_server_open(云).py new file mode 100755 index 0000000..f593200 --- /dev/null +++ b/all_server_open(云).py @@ -0,0 +1,39 @@ +from flask import Flask, jsonify +from flask_cors import CORS +import json +from decimal import Decimal +from datetime import datetime, date + +# 导入蓝图 +from example_info_add import example_info_add_bp +from user_add import user_add_bp + + +# 极简JSON编码器(处理特殊数据类型) +class CustomJSONEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, Decimal): + return float(obj) + elif isinstance(obj, (datetime, date)): + return obj.strftime('%Y-%m-%d %H:%M:%S') + return super().default(obj) + +# 创建单个Flask应用 +app = Flask(__name__) +CORS(app) # 允许跨域 +app.json_encoder = CustomJSONEncoder +app.config['JSON_SORT_KEYS'] = False + + +# 注册所有蓝图 +app.register_blueprint(example_info_add_bp) +app.register_blueprint(user_add_bp) + +if __name__ == '__main__': + # 配置服务(直接修改端口) + host = '0.0.0.0' + port = 5000 + print(f"服务启动:http://{host}:{port}") + print("按 Ctrl+C 停止服务...") + app.run(host=host, port=port, debug=False) # debug=False 生产环境推荐 + diff --git a/db_con.py b/db_con.py new file mode 100755 index 0000000..9f08564 --- /dev/null +++ b/db_con.py @@ -0,0 +1,56 @@ +import pymysql + +# 数据库配置 +db_config = { + 'host': "47.106.222.181", + 'user': "group3", + 'password': 'group3', + 'database': 'ClassDB', + 'port':25083 +} + +def con_mysql(sql_code, params=None): + conn = None + try: + conn = pymysql.connect(** db_config) + conn.ping(reconnect=True) + cursor = conn.cursor() + print(f"执行SQL: {sql_code}") + print(f"参数: {params}") + + # 执行SQL + if params: + cursor.execute(sql_code, params) + else: + cursor.execute(sql_code) + + # 增/删/改操作 + if sql_code.strip().upper().startswith(('INSERT', 'UPDATE', 'DELETE')): + conn.commit() + result = { + 'success': True, + 'affected_rows': cursor.rowcount + } + # 对INSERT操作额外返回自增ID + if sql_code.strip().upper().startswith('INSERT'): + result['lastrowid'] = cursor.lastrowid + return result + + # 查询操作 + elif sql_code.strip().upper().startswith('SELECT'): + data = cursor.fetchall() + columns = [col[0] for col in cursor.description] + return { + 'success': True, + 'data': [dict(zip(columns, row)) for row in data] + } + + return {'success': True} + + except pymysql.MySQLError as err: + if conn: + conn.rollback() + return {'success': False, 'error': f"{type(err).__name__}: {err}"} + finally: + if conn: + conn.close() diff --git a/example_info_add.py b/example_info_add.py new file mode 100755 index 0000000..81c6181 --- /dev/null +++ b/example_info_add.py @@ -0,0 +1,73 @@ +from flask import Blueprint, request, jsonify +from db_con import con_mysql + +example_info_add_bp = Blueprint('example_info_add', __name__) + +""" +API接口:添加example_info数据 +接口路径:POST /api/example_info/add + +请求体示例: +{ + "emotion_state": "开心", + "video_path": "/videos/test1.mp4", + "confidence": 0.95 +} + +字段说明: +- emotion_state (可选):字符串,描述emotion_state +- video_path (可选):字符串,视频文件路径 +- confidence (可选):浮点数,confidence值(0-1) +""" + +@example_info_add_bp.route('/api/example_info/add', methods=['POST']) +def add_example_info(): + try: + data = request.get_json() + + # 验证必需字段 + if not data: + return jsonify({ + "success": False, + "message": "请求数据不能为空" + }), 400 + + # 获取请求数据 + emotion_state = data.get('emotion_state') + video_path = data.get('video_path') + confidence = data.get('confidence') + + # 构建SQL语句 + sql = """ + INSERT INTO group3_emo_info (emotion_state, video_path, confidence) + VALUES (%s, %s, %s) + """ + params = (emotion_state, video_path, confidence) + + # 执行SQL + result = con_mysql(sql, params) + + if result['success']: + return jsonify({ + "success": True, + "message": "example_info数据添加成功", + "data": { + "id": result.get('lastrowid'), + "emotion_state": emotion_state, + "video_path": video_path, + "confidence": confidence + } + }), 201 + else: + return jsonify({ + "success": False, + "message": "添加失败", + "error": result.get('error', '未知错误') + }), 500 + + except Exception as e: + return jsonify({ + "success": False, + "message": "服务器内部错误", + "error": str(e) + }), 500 \ No newline at end of file diff --git a/user_add.py b/user_add.py new file mode 100755 index 0000000..590b4d1 --- /dev/null +++ b/user_add.py @@ -0,0 +1,82 @@ +from flask import Blueprint, request, jsonify +from db_con import con_mysql + +user_add_bp = Blueprint('user_add', __name__) + +""" +API接口:添加用户 +接口路径:POST /api/user/add + +请求体示例: +{ + "username": "testuser", + "password": "12345678" +} + +字段说明: +- username (必需):字符串,用户名(最长8个字符) +- password (可选):字符串,密码(最长8个字符) +""" + +@user_add_bp.route('/api/user/add', methods=['POST']) +def add_user(): + try: + data = request.get_json() + + # 验证必需字段 + if not data: + return jsonify({ + "success": False, + "message": "请求数据不能为空" + }), 400 + + username = data.get('username') + password = data.get('password') + + # 验证用户名是否为空 + if not username: + return jsonify({ + "success": False, + "message": "用户名不能为空" + }), 400 + + # 验证用户名长度 + if len(username) > 8: + return jsonify({ + "success": False, + "message": "用户名长度不能超过8个字符" + }), 400 + + # 构建SQL语句 + sql = """ + INSERT INTO group3_user (username, password) + VALUES (%s, %s) + """ + params = (username, password) + + # 执行SQL + result = con_mysql(sql, params) + + if result['success']: + return jsonify({ + "success": True, + "message": "用户添加成功", + "data": { + "username": username, + "password": password, + "affected_rows": result.get('affected_rows') + } + }), 201 + else: + return jsonify({ + "success": False, + "message": "添加用户失败", + "error": result.get('error', '未知错误') + }), 500 + + except Exception as e: + return jsonify({ + "success": False, + "message": "服务器内部错误", + "error": str(e) + }), 500 \ No newline at end of file