init
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
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
|
||||
Reference in New Issue
Block a user