58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
# 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__)
|
|
|
|
@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("/teacherboard")
|
|
@require_role(roles="teacher")
|
|
def teacherboard():
|
|
return render_template("teacherboard.html")
|
|
|
|
@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")})
|