filesend/backend/app/__init__.py

94 lines
4.1 KiB
Python
Raw Normal View History

2025-10-10 17:25:29 +08:00
from flask import Flask, Blueprint
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_jwt_extended import JWTManager
from flask_cors import CORS
from datetime import datetime
import os
# 初始化数据库
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
# 配置
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'dev-secret-key')
# 修改为MySQL连接替换为你的实际MySQL配置
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
'DATABASE_URL',
'mysql+pymysql://root:taiyi1224@localhost:3306/filesend_db?charset=utf8mb4'
)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JWT_SECRET_KEY'] = os.environ.get('JWT_SECRET_KEY', 'jwt-secret-key')
app.config['UPLOAD_FOLDER'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'uploads')
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16MB
# 确保上传目录存在
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
# 初始化扩展
db.init_app(app)
jwt = JWTManager(app)
CORS(app, resources={
r"/api/*": {
"origins": [
"http://localhost:3000",
"http://localhost:3001",
"http://154.64.255.157:3000",
"http://154.64.255.157:3001",
"http://file.taiyiai.top"
],
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
"allow_headers": ["Content-Type", "Authorization"]
}
})
# 注册蓝图
from .routes import auth_bp, admin_bp, user_bp, settings_bp, team_leader_bp
app.register_blueprint(auth_bp, url_prefix='/api/auth')
app.register_blueprint(user_bp, url_prefix='/api') # 修正为/api以匹配路由定义
app.register_blueprint(admin_bp, url_prefix='/api/admin')
app.register_blueprint(settings_bp, url_prefix='/api/admin')
app.register_blueprint(team_leader_bp)
# 创建数据库表
with app.app_context():
db.create_all()
# 创建默认管理员(修复密码加密问题)
from .models import User, SystemSettings
if not User.query.filter_by(is_admin=True).first():
admin = User(
username='admin',
email='admin@example.com',
is_admin=True,
is_active=True,
daily_quota=100 # 管理员默认配额
)
admin.set_password('admin123') # 使用加密方法设置密码
db.session.add(admin)
db.session.commit()
print("默认管理员已创建")
print("用户名: admin")
print("密码: taiyi1224")
# 初始化默认系统设置
if not SystemSettings.query.first():
from .models import SystemSettings
default_settings = {
'daily_quota': {'value': '5', 'description': '用户每日可领取文件数量', 'data_type': 'int'},
'max_file_size': {'value': '10485760', 'description': '上传文件最大大小(字节)', 'data_type': 'int'},
'auto_reset_quota': {'value': 'true', 'description': '是否自动重置用户每日领取配额', 'data_type': 'bool'},
'reset_hour': {'value': '0', 'description': '每日配额重置时间小时0-23', 'data_type': 'int'},
'allow_registration': {'value': 'true', 'description': '是否允许新用户注册', 'data_type': 'bool'},
'require_admin_approval': {'value': 'true', 'description': '新注册用户是否需要管理员审核', 'data_type': 'bool'},
'site_name': {'value': '文件领取系统', 'description': '网站名称', 'data_type': 'str'},
'max_files_per_user': {'value': '100', 'description': '用户最多可上传文件数量', 'data_type': 'int'}
}
for key, config in default_settings.items():
SystemSettings.set_value(key, config['value'], config['description'], config['data_type'])
print("系统默认设置已初始化")
return app