diff --git a/25c859cf-e15d-458d-82e9-81039c49f9ed.png b/25c859cf-e15d-458d-82e9-81039c49f9ed.png new file mode 100755 index 0000000..fee1273 Binary files /dev/null and b/25c859cf-e15d-458d-82e9-81039c49f9ed.png differ diff --git a/7406b499-a8cb-4b9f-ad15-45558dd1602b.png b/7406b499-a8cb-4b9f-ad15-45558dd1602b.png new file mode 100755 index 0000000..fba41ce Binary files /dev/null and b/7406b499-a8cb-4b9f-ad15-45558dd1602b.png differ 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