diff --git a/__init__ b/__init__ new file mode 100644 index 0000000..6ceb629 --- /dev/null +++ b/__init__ @@ -0,0 +1,76 @@ +# app/__init__.py +import os +from datetime import timedelta + +import redis +from flask import Flask, request +from flask_cors import CORS +from flask_jwt_extended import JWTManager +from flask_migrate import Migrate +from flask_sqlalchemy import SQLAlchemy +from loguru import logger +from config import Config +from app.log_service import LogService + +db = SQLAlchemy() +# redis_host_url = os.getenv('REDIS_URL', 'localhost') +# redis_client = redis.StrictRedis(host=redis_host_url, port=6379, db=0, decode_responses=True) +# 使用完整 URL 创建 Redis 客户端 +redis_client = redis.from_url(Config.REDIS_URL, decode_responses=True) + +# 做一些准备工作,创建 Flask 应用, 配置 JWT 令牌,初始化数据库, 日志系统,注册蓝图(Blueprints)--是各个模块独立独立管理 +def create_app(): + # 创建 Flask 应用,并指定静态文件夹为 'mini12306' + app = Flask(__name__, static_folder='mini12306') + + # 允许跨域请求(CORS) + CORS(app) + + # 推送应用上下文,确保在应用初始化时可以使用 app 相关对象 + app.app_context().push() + + # 从配置对象加载应用配置 + app.config.from_object(Config) + + # 将 redis_client 挂载到 app 上,便于全局访问 + app.redis_client = redis_client + + # 设置 JWT 令牌的有效期为 30 天 + app.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(days=30) + + # 初始化数据库 + db.init_app(app) + + # 绑定数据库迁移工具 + Migrate(app, db) + + # 初始化 JWT 认证管理 + JWTManager(app) + + # 配置日志服务 + LogService.configure_logging() + + # 导入路由模块 + from app.login_manager import login_bp # 登录管理 + from app.passenger_manager import register_bp # 乘客管理(注册) + from app.query_manager import query_bp # 查询管理 + from app.station_manager import station_bp # 车站管理 + from app.mobile_server import mobile_bp # 移动端服务 + from app.train_manager import trains_bp # 列车管理 + from app.bank_server import bank_bp # 银行服务 + from app.id_card_server import id_card_bp # 身份证验证服务 + from app.order_manager import order_bp # 订单管理 + + # 注册蓝图(Blueprints),将各个功能模块绑定到 Flask 应用 + app.register_blueprint(login_bp) + app.register_blueprint(register_bp) + app.register_blueprint(query_bp) + app.register_blueprint(station_bp) + app.register_blueprint(mobile_bp) + app.register_blueprint(trains_bp) + app.register_blueprint(bank_bp) + app.register_blueprint(id_card_bp) + app.register_blueprint(order_bp) + + # 返回 Flask 应用实例 + return app \ No newline at end of file