from flask import Blueprint, render_template, request, redirect, url_for, flash from flask_login import login_user from werkzeug.security import generate_password_hash from ..extensions import db from ..models import User, Profile, UserStatus bp = Blueprint("setup", __name__, url_prefix="/setup") @bp.route("/admin", methods=["GET", "POST"]) def admin(): exists = User.query.filter_by(role="admin").first() if exists: return redirect(url_for("feed.discover")) if request.method == "POST": email = request.form.get("email") username = request.form.get("username") password = request.form.get("password") confirm = request.form.get("confirm") if not email or not username or not password: flash("请完整填写信息") return redirect(url_for("setup.admin")) if password != confirm: flash("两次密码不一致") return redirect(url_for("setup.admin")) if len(password) < 8: flash("密码至少8位,并包含数字与字母") return redirect(url_for("setup.admin")) if User.query.filter((User.email==email) | (User.username==username)).first(): flash("邮箱或用户名已存在") return redirect(url_for("setup.admin")) u = User(email=email, username=username, password_hash=generate_password_hash(password), role="admin", status=UserStatus.approved) db.session.add(u) db.session.flush() db.session.add(Profile(user_id=u.id)) db.session.commit() login_user(u) flash("管理员创建成功") return redirect(url_for("admin.dashboard")) return render_template("setup/admin.html")