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.

85 lines
3.3 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
# 导入 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