| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- from flask import Flask
- from flask_socketio import SocketIO
- from flask_sqlalchemy import SQLAlchemy
- from dotenv import load_dotenv
- import os
- # Load environment variables
- load_dotenv()
- from flask_login import LoginManager
- # Initialize extensions
- from extensions import socketio, login_manager, db
- from models import User
- def create_app():
- app = Flask(__name__)
-
- # Configuration
- app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
- app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+mysqlconnector://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}/{os.getenv('DB_NAME')}"
- app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
- # Initialize extensions with app
- db.init_app(app)
- socketio.init_app(app, cors_allowed_origins="*")
- login_manager.init_app(app)
- login_manager.login_view = 'auth.login'
- @login_manager.user_loader
- def load_user(user_id):
- return User.query.get(int(user_id))
- # Register Blueprints
- from routes.main import main_bp
- from routes.auth import auth_bp
- from routes.admin import admin_bp
- from routes.api import api_bp
-
- app.register_blueprint(main_bp)
- app.register_blueprint(auth_bp, url_prefix='/auth')
- app.register_blueprint(admin_bp, url_prefix='/admin')
- app.register_blueprint(api_bp, url_prefix='/api')
- # Import events (to register handlers)
- import events
- with app.app_context():
- # Create tables if they don't exist
- # Note: In production, use migrations (Alembic/Flask-Migrate)
- db.create_all()
- return app
- if __name__ == '__main__':
- app = create_app()
- socketio.run(app, debug=True, port=5000)
|