from flask import Flask
from flask_login import LoginManager
from config import Config
from app.models import db, User
from app.services.statistics import MONTH_NAMES, STATUS_LABELS, STATUS_COLORS
login_manager = LoginManager()
login_manager.login_view = "auth.login"
login_manager.login_message = "Пожалуйста, войдите в систему"
login_manager.login_message_category = "warning"
@login_manager.user_loader
def load_user(user_id: str):
return db.session.get(User, int(user_id))
def create_app(config_class=Config) -> Flask:
app = Flask(__name__, template_folder="../templates", static_folder="../static")
app.config.from_object(config_class)
db.init_app(app)
login_manager.init_app(app)
# Blueprints
from app.routes.auth import auth_bp
from app.routes.main import main_bp
from app.routes.interns import interns_bp
from app.routes.attendance import attendance_bp
from app.routes.reports import reports_bp
app.register_blueprint(auth_bp)
app.register_blueprint(main_bp)
app.register_blueprint(interns_bp)
app.register_blueprint(attendance_bp)
app.register_blueprint(reports_bp)
# Глобальные данные для шаблонов
@app.context_processor
def inject_globals():
return {
"MONTH_NAMES": MONTH_NAMES,
"STATUS_LABELS": STATUS_LABELS,
"STATUS_COLORS": STATUS_COLORS,
}
# CLI
from app.cli import register_cli
register_cli(app)
return app