from logging.handlers import RotatingFileHandler import os from flask import Flask, jsonify, request from app.config import config from app.services.remote_service import DatabricksQuery from flask_sqlalchemy import SQLAlchemy from flask_cors import CORS from flask_jwt_extended import JWTManager import logging db = SQLAlchemy() jwt = JWTManager() # 配置日志 def setup_logging(app): # 创建日志目录 if not os.path.exists('logs'): os.makedirs('logs') # 配置文件处理器 - 按大小轮转 file_handler = RotatingFileHandler( 'logs/app.log', maxBytes=500*1024*1024, # 100MB backupCount=10 ) file_handler.setLevel(logging.INFO) # 配置控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) # 设置日志格式 formatter = logging.Formatter( '%(asctime)s [%(levelname)s] %(funcName)s:%(lineno)d - %(message)s' ) file_handler.setFormatter(formatter) console_handler.setFormatter(formatter) # 添加到app.logger app.logger.addHandler(file_handler) app.logger.addHandler(console_handler) app.logger.setLevel(logging.DEBUG) # 禁止传播到root logger(避免重复日志) app.logger.propagate = False # 记录启动信息 # app.logger.info('Flask应用启动成功!') def create_app(): app = Flask(__name__) app.config["JWT_SECRET_KEY"] = "your-secret-key" # 替换为你的密钥 app.config["JWT_TOKEN_LOCATION"] = ["headers"] # 从请求头获取令牌 app.config["JWT_HEADER_NAME"] = "Authorization" # 请求头字段名 # 注意:这里可以将 JWT_HEADER_TYPE 设为空,避免强制要求 Bearer 前缀 app.config["JWT_HEADER_TYPE"] = "" # 默认为 'Bearer',设为空则不强制前缀 # 加载配置 app.config.from_object(config) db.init_app(app) jwt.init_app(app) # 配置日志 setup_logging(app) from app.blueprints.auth.routes import auth_bp from app.blueprints.login.routes import login_bp from app.blueprints.incident_gen5.routes import incident_gen5_bp from app.blueprints.oauth.routes import oauth_bp from app.blueprints.incident_gen6.routes import incident_gen6_bp from app.blueprints.accident.routes import accident_bp from app.blueprints.file_uploads.routes import file_uploads_bp domain_prefix='accidentportal/api' app.register_blueprint(auth_bp, url_prefix=f"/{domain_prefix}/api/auth") app.register_blueprint(login_bp, url_prefix=f"/{domain_prefix}/user") app.register_blueprint(incident_gen5_bp, url_prefix=f"/{domain_prefix}/gen5") app.register_blueprint(incident_gen6_bp, url_prefix=f"/{domain_prefix}/gen6") app.register_blueprint(oauth_bp, url_prefix="") app.register_blueprint(accident_bp, url_prefix=f"/{domain_prefix}/accident") app.register_blueprint(file_uploads_bp, url_prefix=f"/{domain_prefix}/file_uploads") CORS(app, supports_credentials=True) return app