94 lines
4.1 KiB
Python
94 lines
4.1 KiB
Python
|
|
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
|