基于 Flask + MySQL + Bootstrap 5 的全栈个人资料库管理系统。 主要功能: - 管理员/普通用户双角色权限体系,全站登录保护 - 资源管理:文本、图片、音频、视频四类资源 - 三种添加方式:本地上传(拖拽)、URL 后台下载、磁力下载(aria2c) - 在线预览:文本、图片、HTML5 音视频播放器 - 安全:bcrypt 加盐密码哈希、CSRF 防护、SQLAlchemy ORM 防注入 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
76 lines
2.6 KiB
Python
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
|
|
)
|