227 lines
6.9 KiB
Python
227 lines
6.9 KiB
Python
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)
|