import datetime
from datetime import datetime, timedelta
import jwt
import uvicorn
from fastapi import FastAPI
app = FastAPI()
from models.cms.lesson import lesson
from models.cms.plan import plan
from models.cms.school import School
from models.cms.teacher import teacher
from models.cms.user import User
from plugin.plugin_sqlalchemy import db
from verfify_token import TokenMiddleware
from fastapi import Depends, HTTPException, status
from sqlalchemy.future import select
from sqlalchemy.exc import SQLAlchemyError
from fastapi.security import OAuth2PasswordBearer
# app = creat_app()
app = FastAPI()
# 注册中间件
app.add_middleware(TokenMiddleware)
# ...其他路由及相关配置...
# 新增的添加用户信息函数
@app.post("/add_user")
def adduser(
# user_id: str,
username: str,
password: str,
nickname: str,
email: str,
school_id: int,
):
try:
new_user = User(
# user_id=user_id,
username=username,
password=password,
nickname=nickname,
email=email,
school_id=school_id,
)
db.add(new_user)
db.commit()
return {"code": f"用户 {username} 添加成功!"}
except Exception as e:
print("添加用户失败!", e)
db.rollback()
return {"code": "添加用户失败!", "massage": str(e)}
db.close()
# 新增的添加教师信息函数
@app.post("/add_teachername")
def addteacher(teachername: str, class_name: str, gender: str, school_id: int):
try:
new_teacher = teacher(
teachername=teachername,
class_name=class_name,
gender=gender,
school_id=school_id,
)
db.add(new_teacher)
db.commit()
db.close()
return {"code": f" {teacher} 添加成功!"}
except Exception as e:
print("添加教师失败!", e)
db.rollback()
return {"code": "添加教师失败!", "massage": str(e)}
# 新增的添加学校信息函数
@app.post("/add_school")
def addschool(
schoolname: str,
info: str,
school_number: int,
school_grade: str,
):
try:
new_school = School(
schoolname=schoolname,
info=info,
school_number=school_number,
school_grade=school_grade,
)
db.add(new_school)
db.commit()
db.close()
return {"code": f"学校 {schoolname} 添加成功!"}
except Exception as e:
print("添加学校失败!", e)
db.rollback()
return {"code": "添加学校失败!", "massage": str(e)}
# 新增的添加计划函数
@app.post("/add_plan")
def addplan(
plan_name: str,
major_name: str,
first_course: str,
second_course: str,
):
try:
new_plan = plan(
plan_name=plan_name,
major_name=major_name,
first_course=first_course,
second_course=second_course,
)
db.add(new_plan)
db.commit()
return {"code": f"计划{plan_name} 添加成功!"}
except Exception as e:
print("添加计划失败!", e)
db.rollback()
return {"code": "添加计划失败!", "massage": str(e)}
# 新增的添加课程信息函数
@app.post("/add_lesson")
def addlesson(
category: str, major: str, professional_category: str, classes: str, user_id: int
):
try:
new_school_class = lesson(
category=category,
professional_category=professional_category,
major=major,
classes=classes,
)
db.add(new_school_class)
db.commit()
return {"code": f"课程 {classes} 添加成功!"}
except Exception as e:
print("添加学校课程失败!", e)
db.rollback()
return {"code": "添加学校课程失败!", "massage": str(e)}
SECRET_KEY = "zzz_2025" # 密钥,用于签名和验证Token
ALGORITHM = "HS256" # 签名算法
# 中间件:生成Token
def generate_token(user_id: int):
payload = {
"user_id": user_id,
# "exp": datetime.utcnow() + timedelta(hours=2), # 设置Token有效期为2小时
}
token = jwt.encode(payload, SECRET_KEY, algorithm=ALGORITHM)
return token
@app.post("/register")
def register_user(username: str, password: str):
# 假设用户注册成功并返回用户ID
user_id = 1 # 示例用户ID
token = generate_token(user_id)
return {"message": "注册成功", "token": token}
# 中间件:验证Token
def verify_token(token: str):
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
user_id = payload.get("user_id")
if user_id is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的Token"
)
return user_id
except jwt.ExpiredSignatureError:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail="Token已过期"
)
except jwt.InvalidTokenError:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的Token"
)
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
async def get_current_user(
token: str = Depends(oauth2_scheme), db: AsyncSession = Depends(get_db)
):
try:
# 验证 Token 并提取 user_id
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
user_id = payload.get("user_id")
if user_id is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail="无效的Token"
)
# 查询数据库获取用户信息
query = select(User).where(User.id == user_id)
result = await db.execute(query)
user = result.scalar_one_or_none()
if user is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail="用户不存在"
)
return user
except (jwt.ExpiredSignatureError, jwt.InvalidTokenError):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail="无效或过期的Token"
)
except SQLAlchemyError as e:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="数据库错误"
)
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
return {"username": current_user.username, "email": current_user.email}
帮我找出问题并修改