Files
ai-app-database/init_db.py
huty f103148ebf feat: 初始化个人资料库 Web 应用
基于 Flask + MySQL + Bootstrap 5 的全栈个人资料库管理系统。

主要功能:
- 管理员/普通用户双角色权限体系,全站登录保护
- 资源管理:文本、图片、音频、视频四类资源
- 三种添加方式:本地上传(拖拽)、URL 后台下载、磁力下载(aria2c)
- 在线预览:文本、图片、HTML5 音视频播放器
- 安全:bcrypt 加盐密码哈希、CSRF 防护、SQLAlchemy ORM 防注入

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 00:16:59 +09:00

76 lines
2.6 KiB
Python

"""
数据库初始化脚本:
1. 创建所有数据库表
2. 写入默认系统配置
3. 创建管理员账号(首次运行)
用法:
python init_db.py
python init_db.py --admin-user admin --admin-pass AdminPass123
"""
import sys
import argparse
from app import create_app
from app.extensions import db, bcrypt
from app.models.user import User
from app.models.resource import Resource
from app.models.setting import SystemSetting
def init_db(admin_username='admin', admin_password='Admin@123456',
admin_email='admin@example.com'):
app = create_app('development')
with app.app_context():
print('[1/3] 正在创建数据库表…')
db.create_all()
print(' ✓ 表结构创建完成')
print('[2/3] 写入默认系统配置…')
for key, (value, description) in SystemSetting.DEFAULTS.items():
if not SystemSetting.query.filter_by(key=key).first():
db.session.add(SystemSetting(
key=key, value=value, description=description
))
db.session.commit()
print(' ✓ 系统配置写入完成')
print('[3/3] 创建管理员账号…')
admin = User.query.filter_by(username=admin_username).first()
if admin:
print(f' ✓ 管理员 "{admin_username}" 已存在,跳过')
else:
pw_hash = bcrypt.generate_password_hash(admin_password).decode('utf-8')
admin = User(
username=admin_username,
email=admin_email,
password_hash=pw_hash,
role='admin',
is_active=True
)
db.session.add(admin)
db.session.commit()
print(f' ✓ 管理员创建成功')
print(f' 用户名: {admin_username}')
print(f' 密 码: {admin_password}')
print(f' 邮 箱: {admin_email}')
print('\n[完成] 数据库初始化成功!')
print(' 运行 python run.py 启动服务')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='初始化数据库')
parser.add_argument('--admin-user', default='admin', help='管理员用户名')
parser.add_argument('--admin-pass', default='Admin@123456', help='管理员密码')
parser.add_argument('--admin-email', default='admin@example.com', help='管理员邮箱')
args = parser.parse_args()
init_db(
admin_username=args.admin_user,
admin_password=args.admin_pass,
admin_email=args.admin_email
)