import os from flask import Flask from config import config from app.extensions import db, login_manager, bcrypt, csrf, migrate def create_app(config_name=None): if config_name is None: config_name = os.environ.get('FLASK_ENV', 'default') app = Flask(__name__) app.config.from_object(config[config_name]) # 确保上传目录存在 os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) for sub in ['text', 'image', 'audio', 'video', 'temp']: os.makedirs(os.path.join(app.config['UPLOAD_FOLDER'], sub), exist_ok=True) # 初始化扩展 db.init_app(app) login_manager.init_app(app) bcrypt.init_app(app) csrf.init_app(app) migrate.init_app(app, db) # 注册蓝图 from app.routes.auth import auth_bp from app.routes.admin import admin_bp from app.routes.resources import resources_bp from app.routes.folders import folders_bp from app.routes.main import main_bp app.register_blueprint(auth_bp, url_prefix='/auth') app.register_blueprint(admin_bp, url_prefix='/admin') app.register_blueprint(resources_bp, url_prefix='/resources') app.register_blueprint(folders_bp, url_prefix='/folders') app.register_blueprint(main_bp) # 注册错误处理 from app.routes.errors import register_error_handlers register_error_handlers(app) # 注册模板过滤器 from app.utils.filters import register_filters register_filters(app) # 注册全局模板函数 from flask_wtf.csrf import generate_csrf from markupsafe import Markup @app.context_processor def inject_globals(): from app.models.setting import SystemSetting site_name = SystemSetting.get('site_name', '个人资料库') return dict(site_name=site_name) @app.template_global() def csrf_token_input(): token = generate_csrf() return Markup(f'') return app