增加teacher登陆和teacher主页

This commit is contained in:
CakeCN
2025-08-24 21:01:00 +08:00
parent 4ff0dd3ec3
commit 88d63335f0
14 changed files with 636 additions and 59 deletions

View File

@@ -1,3 +1,4 @@
from functools import wraps
from flask import Flask, redirect, session, request, jsonify, render_template, send_from_directory, url_for
from flask_cors import CORS
from flask_socketio import SocketIO, join_room, emit, Namespace
@@ -303,6 +304,11 @@ def vscode_data():
print(f"Received data from VSCode: {data}")
return jsonify({"status": "success", "received": data})
@app.route('/logout')
def logout():
session.pop('user_id', None)
return redirect(url_for('login'))
@app.route('/get_session')
def get_session():
user_session = session.get('user_id', 'default_session')
@@ -317,10 +323,45 @@ Login
users_list = UserList()
course_list = CourseList()
def require_teacher(func):
@wraps(func)
def wrapper(*args, **kwargs):
if 'user_id' not in session or session['user_id'] not in uuid2username:
return redirect(url_for('login'))
user_id = session['user_id']
username = uuid2username[user_id]
if users_list.get_user_is_teacher(username) is None or users_list.get_user_is_teacher(username) == False:
return redirect(url_for('login'))
return func(*args, **kwargs)
return wrapper
def require_user(func):
@wraps(func)
def wrapper(*args, **kwargs):
if 'user_id' not in session or session['user_id'] not in uuid2username:
return redirect(url_for('login'))
return func(*args, **kwargs)
return wrapper
@app.route('/register')
def register():
return render_template('register.html')
@app.route('/register_teacher')
def register_teacher():
return render_template('register_teacher.html')
@app.route('/register_teacher_post', methods=['POST'])
def register_teacher_post():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if users_list.has_user(username) is not None:
users_list.add_user(username, password, teacher=True)
create_user_json(username, USER_DATA_DIR)
return jsonify({'success': True, 'message': '注册成功'})
else: return jsonify({'success': False, 'message': '用户已存在,请更换用户名'})
@app.route('/register_post', methods=['POST'])
def register_post():
data = request.get_json()
@@ -362,14 +403,39 @@ def login_post():
uuid2username[session['user_id']] = username
return jsonify({'success': True, 'message': '登录成功'})
@app.route('/login_teacher_post', methods=['POST'])
def login_teacher_post():
data = request.get_json()
username = data.get('username')
password = data.get('password')
pswd = users_list.get_user_pswd(username)
is_teacher = users_list.get_user_is_teacher(username)
if is_teacher is None or is_teacher == False:
return jsonify({'success': False, 'message': '用户名不存在或非教师账号'})
if pswd is None:
return jsonify({'success': False, 'message': '用户名或密码错误'})
if pswd != password:
return jsonify({'success': False, 'message': '用户名或密码错误'})
session['user_id'] = 'user_' + str(uuid.uuid4())
print("user "+ username + "uuid is"+ session['user_id'])
username2uuid[username] = session['user_id']
uuid2username[session['user_id']] = username
return jsonify({'success': True, 'message': '登录成功'})
@app.route('/teacherboard')
@require_teacher
def teacherboard():
return render_template('teacherboard.html')
user_id2UserClass = {}
'''
DashBoard
'''
@app.route('/dashboard')
@require_user
def dashboard():
if 'user_id' not in session or session['user_id'] not in uuid2username:
return redirect(url_for('login'))
user_id = session['user_id']
username = uuid2username[user_id]
if (user_id not in user_id2UserClass):
@@ -385,13 +451,14 @@ Course
'''
@app.route('/course/<course_id>')
@require_user
def course(course_id):
c = load_course_from_json(course_id, course_data_dir = COURSE_DATA_DIR)
return render_template('course.html', course_id=course_id, course_data=c)
@app.route('/select_course', methods=['POST'])
@require_user
def select_course():
if ('user_id' not in session or session['user_id'] not in user_id2UserClass):return redirect(url_for('login'))
user = user_id2UserClass[session['user_id']]
data = request.get_json()
course_id = data.get('course_id')
@@ -401,6 +468,7 @@ def select_course():
@app.route('/')
@require_user
def home_index():
selected_courses=[]
if ('user_id' in session):
@@ -425,5 +493,5 @@ app.my_function = MyFunction()
if __name__ == '__main__':
socketio.on_namespace(VSCodeNamespace('/vscode'))
socketio.on_namespace(AgentNamespace('/agent'))
socketio.run(app, host='0.0.0.0', port=5550, debug=False,allow_unsafe_werkzeug=True)
socketio.run(app, host='0.0.0.0', port=5551, debug=False,allow_unsafe_werkzeug=True)