""" 创建管理员账号 — 交互式命令行脚本 用法: cd backend py -3.12 scripts/create_admin.py """ import sys from pathlib import Path # 确保 backend/ 目录在 sys.path 中,使 app.* 导入正常工作 backend_dir = Path(__file__).resolve().parent.parent sys.path.insert(0, str(backend_dir)) from getpass import getpass from sqlmodel import Session, select from app.core.security import hash_password from app.db.session import engine from app.models.user import User, UserRole def main(): print("=" * 50) print(" 军事科技工作台 — 创建管理员账号") print("=" * 50) print() username = input("请输入用户名: ").strip() if not username: print("❌ 用户名不能为空") sys.exit(1) display_name = input("请输入显示名(中文姓名): ").strip() if not display_name: print("❌ 显示名不能为空") sys.exit(1) password = getpass("请输入密码(输入不显示): ").strip() if not password: print("❌ 密码不能为空") sys.exit(1) password_confirm = getpass("请再次输入密码确认: ").strip() if password != password_confirm: print("❌ 两次输入的密码不一致") sys.exit(1) with Session(engine) as session: # 检查用户名是否已存在 existing = session.exec( select(User).where(User.username == username) ).first() if existing: print(f"❌ 用户名「{username}」已存在,请换一个用户名") sys.exit(1) user = User( username=username, display_name=display_name, password_hash=hash_password(password), role=UserRole.zhipianren, is_active=True, ) session.add(user) session.commit() session.refresh(user) print() print("✅ 管理员账号创建成功!") print(f" 用户名: {user.username}") print(f" 显示名: {user.display_name}") print(f" 角色: {user.role.value}(制片人/管理员)") print(f" ID: {user.id}") print() if __name__ == "__main__": main()