# myapp/views/auth.py from flask import Blueprint, render_template, request, jsonify, redirect, url_for, session, current_app from ..services.auth_service import register_user, login_user, logout_user from ..auth.decorators import require_role bp = Blueprint("auth", __name__) # 将/favicon.ico重定向到/static/favicon.ico @bp.route('/favicon.ico') def redirect_favicon(): return redirect(url_for('static', filename='favicon.ico')) @bp.get("/register") def register(): return render_template("register.html") @bp.get("/register_teacher") def register_teacher(): return render_template("register_teacher.html") @bp.post("/register_post") def register_post(): data = request.get_json(force=True) or {} ok, msg = register_user(data.get("username"), data.get("password"), teacher=False) return jsonify({"success": ok, "message": msg}) @bp.post("/register_teacher_post") def register_teacher_post(): data = request.get_json(force=True) or {} ok, msg = register_user(data.get("username"), data.get("password"), teacher=True) return jsonify({"success": ok, "message": msg}) @bp.get("/login") def login(): # 你原来 return 后还有逻辑,已被覆盖;这里简化 return render_template("login.html") @bp.post("/login_post") def login_post(): data = request.get_json(force=True) or {} ok, msg = login_user(data.get("username"), data.get("password"), require_teacher=False) return jsonify({"success": ok, "message": msg}) @bp.post("/login_teacher_post") def login_teacher_post(): data = request.get_json(force=True) or {} ok, msg = login_user(data.get("username"), data.get("password"), require_teacher=True) return jsonify({"success": ok, "message": msg}) @bp.get("/switch-role/") @require_role def switch_role(role): if role == "teacher": return redirect(url_for("main.dashboard")) else: return redirect(url_for("material.teacherboard")) @bp.get("/logout") def logout(): logout_user() return redirect(url_for("auth.login")) @bp.get("/get_session") def get_session(): return jsonify({"session": session.get("user_id", "default_session")})