|
|
# app/__init__.py
|
|
|
# 导入 os 模块,用于与操作系统进行交互,如获取环境变量等操作
|
|
|
import os
|
|
|
# 导入 timedelta 类,用于表示时间间隔,在设置 JWT 令牌过期时间时会用到
|
|
|
from datetime import timedelta
|
|
|
|
|
|
# 导入 redis 模块,用于与 Redis 数据库进行交互
|
|
|
import redis
|
|
|
# 从 flask 模块导入 Flask 类和 request 对象,Flask 类用于创建 Flask 应用实例,request 对象用于处理 HTTP 请求
|
|
|
from flask import Flask, request
|
|
|
# 从 flask_cors 模块导入 CORS 类,用于处理跨域资源共享问题
|
|
|
from flask_cors import CORS
|
|
|
# 从 flask_jwt_extended 模块导入 JWTManager 类,用于管理 JSON Web Token (JWT)
|
|
|
from flask_jwt_extended import JWTManager
|
|
|
# 从 flask_migrate 模块导入 Migrate 类,用于数据库迁移管理
|
|
|
from flask_migrate import Migrate
|
|
|
# 从 flask_sqlalchemy 模块导入 SQLAlchemy 类,用于集成 SQLAlchemy 数据库 ORM
|
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
|
# 从 loguru 模块导入 logger 对象,用于日志记录
|
|
|
from loguru import logger
|
|
|
# 从 config 模块导入 Config 类,用于加载应用配置
|
|
|
from config import Config
|
|
|
# 从 app.log_service 模块导入 LogService 类,用于配置日志服务
|
|
|
from app.log_service import LogService
|
|
|
|
|
|
# 创建 SQLAlchemy 数据库实例
|
|
|
db = SQLAlchemy()
|
|
|
# 获取 Redis 服务器的主机地址,优先从环境变量中获取,如果环境变量未设置,则使用默认值 'localhost'
|
|
|
redis_host_url = os.getenv('REDIS_URL', 'localhost')
|
|
|
# 创建 Redis 客户端实例,连接到指定的 Redis 服务器
|
|
|
redis_client = redis.StrictRedis(host=redis_host_url, port=6379, db=0, decode_responses=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_app():
|
|
|
"""
|
|
|
创建并配置 Flask 应用实例。
|
|
|
|
|
|
Returns:
|
|
|
Flask: 配置好的 Flask 应用实例。
|
|
|
"""
|
|
|
# 创建 Flask 应用实例,指定静态文件夹为 'mini12306'
|
|
|
app = Flask(__name__, static_folder='mini12306')
|
|
|
# 启用跨域资源共享支持
|
|
|
CORS(app)
|
|
|
# 推送应用上下文,确保应用上下文在后续操作中可用
|
|
|
app.app_context().push()
|
|
|
# 从 Config 类加载应用配置
|
|
|
app.config.from_object(Config)
|
|
|
# 设置 JWT 访问令牌的过期时间为 30 天
|
|
|
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(days=30)
|
|
|
# 初始化 SQLAlchemy 数据库实例
|
|
|
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
|
|
|
|
|
|
# 注册各个蓝图到应用实例
|
|
|
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)
|
|
|
|
|
|
return app
|