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.auth import auth from app.routes.data import data from app.routes.main import main from app.routes.user import user from app.routes.reading import reading app.register_blueprint(main, url_prefix='/') app.register_blueprint(auth, url_prefix='/auth') app.register_blueprint(user, url_prefix='/user') app.register_blueprint(data, url_prefix="/data") app.register_blueprint(reading, url_prefix="/reading") return app