# myapp/views/dashboard.py import json from flask import Blueprint, render_template, request, jsonify, redirect, url_for from ..auth.decorators import require_role from ..services.user_service import get_or_load_current_user, add_course_for_current_user from ..services.course_service import load_course, user_selected_course_briefs bp = Blueprint("main", __name__) # 根路径蓝图 @bp.get("/dashboard") @require_role def dashboard(): user_obj = get_or_load_current_user() if user_obj is None: return redirect(url_for("auth.login")) user_course_data = user_selected_course_briefs(user_obj) return render_template( "dashboard.html", user_data=user_obj.to_json_without_dialog(), user_course_data=json.dumps(user_course_data, ensure_ascii=False), ) @bp.get("/course/") @require_role def course(course_id): c = load_course(course_id) return render_template("course.html", course_id=course_id, course_data=c) @bp.post("/select_course") @require_role def select_course(): data = request.get_json(force=True) or {} course_id = data.get("course_id") if not course_id: return jsonify({"success": False, "message": "缺少 course_id"}), 400 course_data = load_course(course_id) ok = add_course_for_current_user(course_id, course_data) if not ok: return jsonify({"success": False, "message": "未登录或会话失效"}), 401 return jsonify({"success": True, "message": "课程选择成功"}) @bp.get("/") @require_role def home_index(): user_obj = get_or_load_current_user() if user_obj is None: return redirect(url_for("auth.login")) selected_courses = list(getattr(user_obj, "select_course", [])) # 课程目录:依据你的 CourseList 暴露的接口进行传递(这里直接传对象,模板里用) from flask import current_app course_list = current_app.extensions["course_list"] return render_template( "index.html", courses_data=course_list, selected_courses=selected_courses )