filesend/backend/app/__init__.py

94 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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