from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.responses import FileResponse from contextlib import asynccontextmanager from database import engine, SessionLocal from models import Base from routers import teachers, classes, students, scores, employment, stats from seed import init_db, seed_data @asynccontextmanager async def lifespan(app: FastAPI): # Startup: create tables and seed data Base.metadata.create_all(bind=engine) db = SessionLocal() try: seed_data(db) finally: db.close() yield app = FastAPI( title="学生管理系统 API", description="基于 FastAPI 的学生管理系统,支持学生、班级、老师、成绩、就业管理", version="1.0.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Serve static frontend app.mount("/static", StaticFiles(directory="static"), name="static") @app.get("/") async def index(): return FileResponse("static/index.html") app.include_router(teachers.router) app.include_router(classes.router) app.include_router(students.router) app.include_router(scores.router) app.include_router(employment.router) app.include_router(stats.router) if __name__ == "__main__": import uvicorn uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)