Files
sentclaw/backend/app/__init__.py
T
2026-04-07 16:05:05 +08:00

63 lines
1.4 KiB
Python

from flask import Flask
from flask_cors import CORS
from flask_migrate import Migrate
from flask_jwt_extended import JWTManager
import logging
import os
from .config import config_by_name
from .models import db
def create_app(config_name=None):
app = Flask(__name__)
if config_name is None:
config_name = os.environ.get("FLASK_ENV", "development")
app.config.from_object(config_by_name[config_name])
CORS(app, origins=app.config["CORS_ORIGINS"])
db.init_app(app)
migrate = Migrate(app, db)
jwt = JWTManager(app)
setup_logging(app)
register_blueprints(app)
setup_error_handlers(app)
return app
def setup_logging(app):
log_dir = os.path.dirname(app.config["LOG_FILE"])
if not os.path.exists(log_dir):
os.makedirs(log_dir)
logging.basicConfig(
level=getattr(logging, app.config["LOG_LEVEL"]),
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[logging.FileHandler(app.config["LOG_FILE"]), logging.StreamHandler()],
)
def register_blueprints(app):
from .api import api_bp
app.register_blueprint(api_bp, url_prefix="/api")
def setup_error_handlers(app):
@app.errorhandler(404)
def not_found(error):
return {"error": "Not found"}, 404
@app.errorhandler(500)
def internal_error(error):
app.logger.error(f"Internal error: {error}")
return {"error": "Internal server error"}, 500