feat: 初始版本,圆角主题与首次管理员引导
This commit is contained in:
39
app/blueprints/setup.py
Normal file
39
app/blueprints/setup.py
Normal file
@@ -0,0 +1,39 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user