You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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