import os from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_bcrypt import Bcrypt from flask_login import LoginManager # Initialize Flask extensions db = SQLAlchemy() migrate = Migrate() bcrypt = Bcrypt() login_manager = LoginManager() login_manager.login_view = 'auth.login' login_manager.login_message_category = 'info' def create_app(): app = Flask(__name__) # Load configuration config_name = os.getenv('FLASK_CONFIG', 'DevelopmentConfig') # Default to DevelopmentConfig app.config.from_object(f'app.config.{config_name}') # Initialize extensions db.init_app(app) migrate.init_app(app, db) bcrypt.init_app(app) login_manager.init_app(app) # Import models here to avoid circular imports from app.models import User # Import the User model # Set up the user_loader function @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) # Query the User model by ID # Register blueprints from app.routes import main, auth, user app.register_blueprint(main, url_prefix='/') app.register_blueprint(auth, url_prefix='/auth') app.register_blueprint(user, url_prefix='/user') return app