|
|
# 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
|
|
|
|