app.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from flask import Flask
  2. from flask_socketio import SocketIO
  3. from flask_sqlalchemy import SQLAlchemy
  4. from dotenv import load_dotenv
  5. import os
  6. # Load environment variables
  7. load_dotenv()
  8. from flask_login import LoginManager
  9. # Initialize extensions
  10. from extensions import socketio, login_manager, db
  11. from models import User
  12. def create_app():
  13. app = Flask(__name__)
  14. # Configuration
  15. app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
  16. app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+mysqlconnector://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}/{os.getenv('DB_NAME')}"
  17. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
  18. # Initialize extensions with app
  19. db.init_app(app)
  20. socketio.init_app(app, cors_allowed_origins="*")
  21. login_manager.init_app(app)
  22. login_manager.login_view = 'auth.login'
  23. @login_manager.user_loader
  24. def load_user(user_id):
  25. return User.query.get(int(user_id))
  26. # Register Blueprints
  27. from routes.main import main_bp
  28. from routes.auth import auth_bp
  29. from routes.admin import admin_bp
  30. from routes.api import api_bp
  31. app.register_blueprint(main_bp)
  32. app.register_blueprint(auth_bp, url_prefix='/auth')
  33. app.register_blueprint(admin_bp, url_prefix='/admin')
  34. app.register_blueprint(api_bp, url_prefix='/api')
  35. # Import events (to register handlers)
  36. import events
  37. with app.app_context():
  38. # Create tables if they don't exist
  39. # Note: In production, use migrations (Alembic/Flask-Migrate)
  40. db.create_all()
  41. return app
  42. if __name__ == '__main__':
  43. app = create_app()
  44. socketio.run(app, debug=True, port=5000)