from flask import Flask, request, session from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_login import LoginManager from flask_cors import CORS from flask_babel import Babel, gettext as _ from config.config import Config # Initialize extensions db = SQLAlchemy() migrate = Migrate() login_manager = LoginManager() cors = CORS() babel = Babel() def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(config_class) # Initialize extensions with app db.init_app(app) migrate.init_app(app, db) login_manager.init_app(app) cors.init_app(app) # Login manager configuration login_manager.login_view = 'auth.login' login_manager.login_message = 'Por favor inicia sesión para acceder a esta página.' login_manager.login_message_category = 'info' # Import models to ensure they are registered from app.models import user # Register blueprints from app.routes import auth_bp, classrooms_bp, main_bp, schedule_bp app.register_blueprint(auth_bp, url_prefix="/") app.register_blueprint(classrooms_bp, url_prefix="/classrooms") app.register_blueprint(main_bp, url_prefix="/") app.register_blueprint(schedule_bp, url_prefix="/schedule") # Babel language selector @app.context_processor def inject_conf_vars(): return dict( languages=app.config['LANGUAGES'], current_lang=session.get('language', request.accept_languages.best_match(app.config['LANGUAGES']) or app.config['BABEL_DEFAULT_LOCALE']) ) # Language selector function def get_locale(): # 1. Check if language is explicitly set in URL parameters if request.args.get('lang'): lang = request.args.get('lang') if lang in app.config['LANGUAGES']: return lang # 2. Check if language is stored in session if 'language' in session: return session['language'] # 3. Check browser language preference return request.accept_languages.best_match(app.config['LANGUAGES']) or app.config['BABEL_DEFAULT_LOCALE'] # Configure Babel babel.init_app(app, locale_selector=get_locale) return app