from flask import Flask, request, redirect, url_for, render_template, session, jsonify from db.connection import MySQLPool from config import SECRET_KEY from db.database_manager import DatabaseManager from models.User import User app = Flask(__name__, static_folder='static') app.secret_key = SECRET_KEY # 从配置文件设置 # 一个全局MySQLPool对象,用于管理数据库连接 mysql_pool = MySQLPool() @app.route('/') def index(): # 如果用户已登录,则重定向到主页;否则,重定向到登录页面 if 'username' in session: return redirect(url_for('home')) else: return render_template('login.html') @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': data = request.get_json() # print(data) user = User( nickname=data.get('nickname'), phone_number=data.get('cellphone'), # 确保JSON中的键和这里匹配 password=data.get('password'), identity=data.get('identity'), status=True # 或者根据你的逻辑设置 ) db_manager = DatabaseManager() if not db_manager.user_exists(user.phone_number): db_manager.insert_user(user) return jsonify({"success": True, "message": "注册成功"}) else: return jsonify({"success": False, "message": "用户已存在"}) else: return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') else: phone_number = request.form['username'] password = request.form['password'] db_manager = DatabaseManager() result = db_manager.valid_login(phone_number, password) # 获取验证结果 # 确保用户已验证且活跃(未被禁用) if result['valid'] and result['status'] == 1: # 登录成功 session['username'] = phone_number session['role'] = result['identity'] # 设置用户角色 session['nickname'] = result['nickname'] return jsonify(success=True, message="登录成功") elif not result['status']: # 用户被禁用的情况 return jsonify(success=False, message="账户已被禁用") else: # 其他登录失败情况 return jsonify(success=False, message="无效的用户名或密码") @app.route('/forget', methods=['GET', 'POST']) def forget_page(): return render_template('forget.html') @app.route('/home') def home(): if 'username' in session: return render_template('home.html') else: return redirect("login") @app.route('/logout') def logout(): # 清除session中的所有信息 session.pop('username', None) # 从会话中移除用户 # 返回一个响应,或者重定向到登录页面 return redirect('/login') @app.route('/api/menu') def get_menu(): db_manager = DatabaseManager() # 从session中获取用户角色 if 'role' in session: role = session['role'] menu_items = db_manager.get_menu(role) # print(menu_items) # 转换菜单项为期望的格式并返回 formatted_menu_items = [ {"name": item['menu_name'], "path": item['path']} for item in menu_items ] return jsonify(formatted_menu_items) # 如果没有角色信息,可能用户未登录或session过期 return jsonify([]), 401 # 未授权状态码 @app.route('/home/profile', methods=['GET', 'POST']) def profile(): if request.method == 'POST': # 从表单获取数据 nickname = request.form['nickname'] avatar = request.files['avatar'] # 处理头像和昵称更新逻辑 # ... return "资料更新成功" # 或者重定向到其他页面 # 如果是GET请求,显示表单页面 return render_template('profile.html') # 确保这里渲染的是包含上面表单的HTML页面 @app.route('/course-info', methods=['GET', 'POST']) def course_info(): if request.method == "GET": return render_template('course-info.html') @app.route('/api/get-course-info', methods=['GET']) def get_course_info(): db_manager = DatabaseManager() course_data = db_manager.get_all_courses() print(course_data) return jsonify(course_data) @app.route('/api/get-course-type', methods=['GET']) def get_course_type(): db_manager = DatabaseManager() course_data = db_manager.get_course_type() # 创建存储必修和选修课程名称的字典 course_info = {"必修": [], "选修": []} for course in course_data: if course['course_type'] == '必修': course_info["必修"].append(course['course_name']) elif course['course_type'] == '选修': course_info["选修"].append(course['course_name']) return jsonify(course_info) @app.route('/attendance', methods=['GET', 'POST']) def course_checkin(): return render_template('attendance.html') @app.route('/announcement', methods=['GET', 'POST']) def announcement(): return render_template('announcement.html') @app.route('/attendance-teacher', methods=['GET', 'POST']) def announcement_teacher(): return render_template('attendance-teacher.html') @app.route('/attendance-reminder', methods=['GET', 'POST']) def attendance_reminder(): return render_template('attendance-reminder.html') @app.route('/course-category', methods=['GET', 'POST']) def course_category(): return render_template('course-category.html') @app.route('/attendance-teacher/import-class', methods=['GET']) def import_class(): return render_template('import-class.html') @app.route('/attendance-teacher/attendance', methods=['GET']) def teacher_attendance(): return render_template('attendance-teacher.html') from flask import request @app.route('/api/get-teacher-attendance-table', methods=['GET']) def get_current_teacher_courses(): phone_number = session.get('username') # 获取分页参数 page = request.args.get('page', 1, type=int) # 如果没有提供,默认为第一页 limit = request.args.get('limit', 10, type=int) # 如果没有提供,默认每页10条 # 获取所有课程数据 db_manager = DatabaseManager() all_course_data = db_manager.get_current_teacher_courses(phone_number) # 计算分页的起始和结束索引 start = (page - 1) * limit end = start + limit # 获取当前页的数据 current_page_data = all_course_data[start:end] # 构建响应字典 response = { 'msg': 'ok' if current_page_data else 'no_data', 'count': len(all_course_data), # 数据的总数 'data': current_page_data # 当前页的课程信息列表 } # 将查询结果转换为JSON格式并返回 return jsonify(response) if __name__ == '__main__': app.run(debug=True)