40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
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")
|