from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_login import LoginManager import pymysql from config import Config db = SQLAlchemy() migrate = Migrate() login_manager = LoginManager() def create_app(): app = Flask(__name__) app.config.from_object(Config) # Initialize extensions db.init_app(app) migrate.init_app(app, db) login_manager.init_app(app) login_manager.login_view = 'auth.login' login_manager.login_message = 'Please log in to access this page.' # MySQL connection (read-only) - initialized when needed def get_mysql_connection(): if not hasattr(app, 'mysql_connection') or app.mysql_connection is None: try: app.mysql_connection = pymysql.connect( host=app.config['MYSQL_CONFIG']['host'], database=app.config['MYSQL_CONFIG']['database'], user=app.config['MYSQL_CONFIG']['user'], password=app.config['MYSQL_CONFIG']['password'], port=app.config['MYSQL_CONFIG']['port'], autocommit=False # Ensure read-only behavior ) except Exception as e: print(f"MySQL connection failed: {e}") app.mysql_connection = None return app.mysql_connection # Make connection function available to app context app.get_mysql_connection = get_mysql_connection # Register blueprints from blueprints.auth import auth_bp from blueprints.main import main_bp app.register_blueprint(auth_bp, url_prefix='/auth') app.register_blueprint(main_bp) # User loader for Flask-Login from models import Users @login_manager.user_loader def load_user(user_id): return Users.query.get(int(user_id)) # Note: Database tables will be managed by Flask-Migrate # Use 'flask db init', 'flask db migrate', 'flask db upgrade' commands return app if __name__ == '__main__': app = create_app() app.run(debug=True)