增加teacher登陆和teacher主页
This commit is contained in:
76
Html/app.py
76
Html/app.py
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user