85 lines
3.8 KiB
Python
85 lines
3.8 KiB
Python
|
|||
|
|
# 【路径兜底】本项目所有模块都用 `from sqlalchemy_fastapi_demo_1.xxx import ...` 导入,
|
||
|
|
# 这要求「本项目的父目录」在 sys.path 里。直接右键运行 main.py 时 Python 只会把
|
||
|
|
# sqlalchemy_fastapi_demo_1 自身加入 sys.path,父目录不在其中,就会报
|
||
|
|
# ModuleNotFoundError: No module named 'sqlalchemy_fastapi_demo_1'。
|
||
|
|
# 这里主动把父目录补进去,保证 PyCharm 右键运行、命令行、Docker 三种方式都能跑。
|
||
|
|
import os
|
||
|
|
import sys
|
||
|
|
|
||
|
|
_PROJECT_PARENT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||
|
|
if _PROJECT_PARENT_DIR not in sys.path:
|
||
|
|
sys.path.insert(0, _PROJECT_PARENT_DIR)
|
||
|
|
|
||
|
|
from fastapi import FastAPI
|
||
|
|
from fastapi.middleware.cors import CORSMiddleware
|
||
|
|
|
||
|
|
from sqlalchemy_fastapi_demo_1.api import statistics
|
||
|
|
from sqlalchemy_fastapi_demo_1.database import engine, Base
|
||
|
|
# 统一用「包名.模块」的方式导入,和 dao/model/scheme 里的写法保持一致。
|
||
|
|
# 裸写 `from api import ...` 只在工作目录恰好是本项目根时才能跑起来,
|
||
|
|
# 放到 Docker 或其它目录运行就会 ModuleNotFoundError。
|
||
|
|
from sqlalchemy_fastapi_demo_1.api.c_lass import router as class_router
|
||
|
|
|
||
|
|
from sqlalchemy_fastapi_demo_1.api import employment_api # 导入 employment_api 子路由
|
||
|
|
|
||
|
|
from sqlalchemy_fastapi_demo_1.api import Score
|
||
|
|
|
||
|
|
from sqlalchemy_fastapi_demo_1.api.students import router as student_router
|
||
|
|
|
||
|
|
from sqlalchemy_fastapi_demo_1.api.advisors import router as advisor_router
|
||
|
|
from sqlalchemy_fastapi_demo_1.api import teachers
|
||
|
|
Base.metadata.create_all(bind=engine)
|
||
|
|
# 首次运行:如果数据库里还没有 c_lass 表,放开下面这行注释自动建表。
|
||
|
|
# 表已经建好的话,保持注释状态即可。
|
||
|
|
# Base.metadata.create_all(bind=engine)
|
||
|
|
|
||
|
|
# 创建 FastAPI 实例
|
||
|
|
app = FastAPI(
|
||
|
|
title="FastAPI + SQLAlchemy 分层架构",
|
||
|
|
description="学生信息管理系统 - 班级模块",
|
||
|
|
version="1.0.0",
|
||
|
|
)
|
||
|
|
|
||
|
|
# 跨域中间件(前端网页访问后端接口需要)
|
||
|
|
app.add_middleware(
|
||
|
|
CORSMiddleware,
|
||
|
|
allow_origins=["*"], # 开发期允许所有来源,上线应指定域名
|
||
|
|
allow_credentials=True,
|
||
|
|
allow_methods=["*"],
|
||
|
|
allow_headers=["*"],
|
||
|
|
)
|
||
|
|
|
||
|
|
# 注册班级路由,统一加前缀 /c_lass
|
||
|
|
app.include_router(class_router, prefix="/c_lass", tags=["班级管理模块"])
|
||
|
|
# ⑫ 把班级路由注册进应用,统一加前缀 /c_lass
|
||
|
|
# 所以API层里 @router.post("/add") 的完整地址是 POST /c_lass/add
|
||
|
|
app.include_router(employment_api.router, prefix="/api/employment_api", tags=["就业模块管理"])
|
||
|
|
app.include_router(Score.app_score, prefix="/api/score", tags=["成绩管理"])
|
||
|
|
app.include_router(student_router,prefix="/api/student", tags=["学生信息管理"])
|
||
|
|
app.include_router(advisor_router, prefix="/advisors", tags=["顾问老师模块"])
|
||
|
|
app.include_router(teachers.router, prefix="/api/teachers", tags=["老师模块管理"])
|
||
|
|
app.include_router(statistics.router,prefix="/api/statistics",tags=["统计模块"])
|
||
|
|
# 根路径
|
||
|
|
# @app.get("/")
|
||
|
|
# async def root():
|
||
|
|
# return {"message": "欢迎访问!请访问 /docs 查看接口文档。"}
|
||
|
|
|
||
|
|
|
||
|
|
# 直接运行此文件时启动 uvicorn
|
||
|
|
if __name__ == "__main__":
|
||
|
|
import os
|
||
|
|
import uvicorn
|
||
|
|
|
||
|
|
# 地址与端口同样从环境变量读取:
|
||
|
|
# - 本地开发:默认 0.0.0.0:8004,局域网内的前端也能连上
|
||
|
|
# - Docker:容器必须监听 0.0.0.0,写 127.0.0.1 会导致外部访问不到
|
||
|
|
uvicorn.run(
|
||
|
|
# 与上面的包名导入保持一致;运行入口请确保父目录在工作路径中(见 README 说明)
|
||
|
|
"sqlalchemy_fastapi_demo_1.main:app",
|
||
|
|
host=os.getenv("APP_HOST", "0.0.0.0"),
|
||
|
|
port=int(os.getenv("APP_PORT", "8004")),
|
||
|
|
# 容器里一般关掉热重载,可通过 APP_RELOAD=false 控制
|
||
|
|
reload=os.getenv("APP_RELOAD", "true").lower() in ("1", "true", "yes"),
|
||
|
|
)
|