# =========================================== # 班级操行分管理系统 - FastAPI 主入口 # =========================================== # 开发者: Canglan # 联系方式: admin@sea-studio.top # 版权归属: Sea Network Technology Studio # 许可证: MIT License # 版权所有: Copyright (c) 2024 Sea Network Technology Studio # =========================================== from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager import uvicorn from config import settings from utils.logger import setup_logger, log_access from utils.database import init_db_pool, close_db_pool from utils.redis_client import init_redis_pool, close_redis_pool from routes import auth, student, parent, admin, subject, debug # 设置日志 logger = setup_logger() @asynccontextmanager async def lifespan(app: FastAPI): """应用生命周期管理""" logger.info("正在启动应用...") await init_db_pool() await init_redis_pool() logger.info(f"{settings.APP_NAME} 启动完成") yield logger.info("正在关闭应用...") await close_db_pool() await close_redis_pool() logger.info("应用已关闭") # 创建FastAPI应用 app = FastAPI( title=settings.APP_NAME, version=settings.API_VERSION, debug=settings.DEBUG, lifespan=lifespan ) # 访问日志中间件 @app.middleware("http") async def access_log_middleware(request: Request, call_next): log_access(request) response = await call_next(request) return response # CORS中间件 app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 注册路由 app.include_router(auth.router, prefix="/api/auth", tags=["认证"]) app.include_router(student.router, prefix="/api/student", tags=["学生端"]) app.include_router(parent.router, prefix="/api/parent", tags=["家长端"]) app.include_router(admin.router, prefix="/api/admin", tags=["管理端"]) app.include_router(subject.router, prefix="/api/subject", tags=["科目管理"]) app.include_router(debug.router, tags=["调试"]) @app.get("/") async def root(): """根路径健康检查""" return {"status": "ok", "message": f"{settings.APP_NAME} API 运行中"} @app.get("/health") async def health_check(): """健康检查接口""" return {"status": "healthy"} if __name__ == "__main__": uvicorn.run( "main:app", host="0.0.0.0", port=8000, reload=settings.DEBUG )