上传文件至「api」

This commit is contained in:
2026-09-22 21:35:20 +08:00
parent 0cd4a1fa45
commit 23df163ca6
5 changed files with 309 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
from fastapi import APIRouter,Depends,HTTPException,Query
from dao.class_dao import add_class_dao, update_class_dao, delete_class_dao, hard_delete_class_dao,class_no_exist,get_class_list_dao,get_class_by_id_dao
from schema.class_schema import ClassCreate,ClassResponse,ClassUpdate
from database import get_db
from typing import Optional
from sqlalchemy.orm import Session
class_router = APIRouter()
@class_router.post('',response_model=ClassResponse,summary='添加班级信息')
def add_class(c:ClassCreate,db=Depends(get_db)):
if class_no_exist(c.class_id,db):
raise HTTPException(status_code=404,detail='该编号已经存在')
ok,result = add_class_dao(c.model_dump(),db)
if not ok:
raise HTTPException(status_code=500,detail='服务器繁忙或指定的老师不存在')
return ClassResponse(totals=1,data=result)
@class_router.put('/{id}',summary='更新班级信息')
def update_class(id:int,c:ClassUpdate,db=Depends(get_db)):
d = c.model_dump()
r = update_class_dao(id=id ,update_data=d,db=db)
if not r:
raise HTTPException(status_code=500,detail='更新失败')
return{'code':200,'total':1,'detail':'更新成功'}
'''
@class_app.get('')
def get_class(id:int,db=Depends(get_db),page:int=1,page_size:int=10):
rows = get_class_dao(id=id,db=db,page=page,page_size=page_size)
if rows:
return rows
raise HTTPException(status_code=404,detail='该班级不存在')
'''
@class_router.get('',summary='查询班级信息')
def get_classes(
id: Optional[int] = Query(None, description="班级ID"),
class_id: Optional[str] = Query(None, description="班级编号"),
class_name: Optional[str] = Query(None, description="班级名称(支持模糊搜索)"),
ht_id: Optional[int] = Query(None, description="班主任ID"),
t_id: Optional[int] = Query(None, description="教师ID"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(10, ge=1, le=100, description="每页条数"),
db: Session = Depends(get_db)
):
# 如果明确传了 id,当作单条查询处理
if id is not None:
single_class = get_class_by_id_dao(id=id, db=db)
if not single_class:
raise HTTPException(status_code=404, detail="该班级不存在")
return single_class
# 多条件列表查询
total, items = get_class_list_dao(
db=db,
class_id=class_id,
class_name=class_name,
ht_id=ht_id,
t_id=t_id,
page=page,
page_size=page_size
)
return {
"total": total,
"page": page,
"page_size": page_size,
"items": items
}
@class_router.delete('/{id}',summary='软删除') #软删除
def delete_class(id:int,db=Depends(get_db)):
rows = delete_class_dao(id=id,db=db)
if not rows:
raise HTTPException(status_code=404,detail='该班级不存在或已删除')
return{'code':200,'total':rows,'detail':'删除成功'}
@class_router.delete('{id}/hard',summary='删除班级信息')
def hard_delete_class(id:int,db=Depends(get_db)):
rows = hard_delete_class_dao(id=id,db=db)
if not rows:
raise HTTPException(status_code=404,detail='该班级不存在')
return{'code':200,'total':rows,'detail':'物理删除成功'}
+35
View File
@@ -0,0 +1,35 @@
from fastapi import APIRouter,Depends,HTTPException
from database import *
from schema.epy_schema import EmploymentRequest
from dao.epy_dao import get_employment_dao,wq_employment_dao,upd_employment_dao,del_employment_dao
epy_router = APIRouter()
@epy_router.get('',summary='查询就业信息')
def get_employment(stu_id:str,company:str,salary:int,db=Depends(get_db)): # get变动
try:
rows = get_employment_dao(db, stu_id, company, salary)
if not rows: # dao层返回的是q.() 是列表
return {'code':404,'detail':'数据不存在','total':[]} # 数据不存在返回报错信息
except Exception as e:
raise HTTPException(status_code=500, detail=f'查询失败:{str(e)}')
return {'code':200,'detail':'查询成功','date':[{'stu_id':i.stu_id,'company':i.company,'salary':i.salary} for i in rows]}
@epy_router.post('',summary='新增就业信息')
def add_employment(e:EmploymentRequest,db=Depends(get_db)):
d= e.model_dump()
r = wq_employment_dao(d,db)
return {'code':200,'detail':'添加成功!','total':r}
#
#
@epy_router.put('',summary='更新就业信息')
def update_employment(e:EmploymentRequest,db=Depends(get_db)):
e1 = e.model_dump()
r = upd_employment_dao(e1,db)
return {'code':200,'msg':'更新成功','total':r}
#
@epy_router.delete('',summary='删除就业信息')
def delete_employment(stu_id:str,db=Depends(get_db)):
r =del_employment_dao(stu_id,db)
return {'code':200,'totals':r,'detail':'删除成功!'}
+45
View File
@@ -0,0 +1,45 @@
from database import get_db
from fastapi import APIRouter,Depends
from dao.sc_dao import a,a1,a2,a3,a4,a5
from schema.sc_schema import Test
score_router=APIRouter()
@score_router.post('',summary='添加成绩信息')
def scores(s:Test,db=Depends(get_db)):
d = s.model_dump()
a(d,db)
return {'code':200,'detail':'添加成功!',}
@score_router.delete('',summary='删除成绩信息')
def scores1(stu_id:int,db=Depends(get_db)):
r = a1(stu_id,db)
if r==0:
return '没有该学生'
else:
return f'已删除学生编号为{stu_id}的学生'
@score_router.put('',summary='更新成绩信息')
def scores2(stu_id:int,exam_seq:int,s:Test,db=Depends(get_db)):
r=a2(stu_id,exam_seq,s,db)
if r!=0:
return '更新成功'
else:
return '没有该数据'
@score_router.get('',summary='通过学号查询成绩信息')
def scores3(stu_id:int,exam_seq:int,db=Depends(get_db)):
r=a3(stu_id,exam_seq,db)
try:
return {'成绩编号':r.id,'学生编号':r.stu_id,f'第{exam_seq}次成绩:':r.score,'创建日期':r.create_date,'更新日期':r.update_date}
except:
return '没有该学生'
@score_router.delete('/{stu_id}',summary='软删除')
def scores4(stu_id:int,exam_seq:int,db=Depends(get_db)):
r=a4(stu_id, exam_seq, db)
if r == 1:
return '没有该数据'
else:
return '已删除'
@score_router.get('/{stu_id}',summary='计算总分、平均分、最大值、最小值')
def scores5(stu_id:int,db=Depends(get_db)):
s,r,a=a5(stu_id,db)
return f'总分:{s},平均分:{s/len(r)},最大值:{max(a)},最小值:{min(a)}'
+92
View File
@@ -0,0 +1,92 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from database import get_db
from dao.stu_dao import create_student, get_student_by_id, get_student_list, update_student, delete_student_logic
from schema.stu_schema import (
StudentCreateRequest,
StudentUpdateRequest,
StudentQuery,
StudentResponse,
StudentPageResponse
)
# 创建路由对象 API Router1
stu_router = APIRouter()
@stu_router.post("", response_model=StudentResponse, summary="新增学生")
def add_student(
student_req: StudentCreateRequest,
db: Session = Depends(get_db)
):
db_stu = create_student(db, student_req)
if db_stu is None:
raise HTTPException(status_code=500, detail="新增学生失败,数据库异常")
return StudentResponse.model_validate(db_stu)
@stu_router.get("", response_model=StudentPageResponse, summary="根据学号姓名班级查询")
def get_student_page(
query: StudentQuery = Depends(),
db: Session = Depends(get_db)
):
total, db_stu_list = get_student_list(
db,
stu_id=query.stu_id,
stu_name=query.stu_name,
class_id=query.class_id,
page=query.page,
page_size=query.page_size
)
if total == 0:
raise HTTPException(status_code=404, detail="没有找到符合条件的学生")
item_list = [StudentResponse.model_validate(s) for s in db_stu_list]
return StudentPageResponse(
total=total,
page=query.page,
page_size=query.page_size,
items=item_list
)
@stu_router.get("/{stu_id}", response_model=StudentResponse, summary="根据学号查询")
def get_one_student(
stu_id: str,
db: Session = Depends(get_db)
):
db_stu = get_student_by_id(db, stu_id)
if db_stu is None:
raise HTTPException(status_code=404, detail="该学生不存在")
return StudentResponse.model_validate(db_stu)
@stu_router.put("/{stu_id}", response_model=StudentResponse, summary="修改学生信息")
def edit_student(
stu_id: str,
update_req: StudentUpdateRequest,
db: Session = Depends(get_db)
):
exist = get_student_by_id(db, stu_id)
if exist is None:
raise HTTPException(status_code=404, detail="该学生不存在")
db_stu = update_student(db, stu_id, update_req)
if db_stu is None:
raise HTTPException(status_code=500, detail="修改学生失败,数据库异常")
return StudentResponse.model_validate(db_stu)
@stu_router.delete("/{stu_id}", response_model=StudentResponse, summary="删除学生信息")
def remove_student(
stu_id: str,
db: Session = Depends(get_db)
):
exist = get_student_by_id(db, stu_id)
if exist is None:
raise HTTPException(status_code=404, detail="该学生不存在")
db_stu = delete_student_logic(db, stu_id)
if db_stu is None:
raise HTTPException(status_code=500, detail="删除学生失败,数据库异常")
return StudentResponse.model_validate(db_stu)
+59
View File
@@ -0,0 +1,59 @@
from fastapi import APIRouter,Depends,UploadFile,File,Query
from dao.th_dao import insert_teachers_dao,update_teachers_dao,delete_teachers_dao,get_teachers_limit_dao,get_teachers_name_dao
from schema.th_schema import RequestModel, ResponseModel
from database import get_db
t_router = APIRouter()
@t_router.get("",summary='分页查询教师接口')
def get_teachers(p:int=Query(default=0,ge=0,description='页码,0表示查询全部'),
n:int=Query(default=0,ge=0,description='每页条数,0表示查询全部'),
db=Depends(get_db)):
db_teachers = get_teachers_limit_dao(p,n,db)
return ResponseModel(data=db_teachers,total=len(db_teachers))
@t_router.get("/{name}",summary='通过名称查询教师接口')
def get_name_teachers(name:str,db=Depends(get_db)):
db_teachers = get_teachers_name_dao(name,db)
return ResponseModel(data=db_teachers,total=len(db_teachers))
@t_router.post("",summary='新增教师接口')
def insert_teachers(req:RequestModel,db=Depends(get_db)):
rq= req.model_dump()
n,m = insert_teachers_dao(rq,db)
# print('打印获取的值:',n,m)
return ResponseModel(total=n,msg=m)
@t_router.put("",summary='更新教师接口')
def update_teachers(req:RequestModel,db=Depends(get_db)):
rq= req.model_dump()
n,m = update_teachers_dao(rq,db)
return ResponseModel(total=n,msg=m)
@t_router.delete("/{t_id}",summary='删除教师接口')
def delete_teachers(t_id:int,db=Depends(get_db)):
n,m =delete_teachers_dao(t_id,db)
return ResponseModel(msg=m,total=n)
@t_router.post('/files',summary='上传文件接口')
async def upload_files(f:UploadFile=File(),db=Depends(get_db)):
# print('UploadFile上传文件,读取该对象:',f)
text =await f.read()
l =text.decode('utf-8').split('\n')
lg = 0
dt = []
print('长度为',lg,l)
for i in l:
if '教师编号' in i:
continue
p = i.split()
if not p: # 判断如果p为[],跳过
continue
l2 = ['t_id','t_name','t_age','t_phone','t_sex','class_id']
d =dict()
for j in range(len(p)):
d[l2[j]]=p[j]
insert_teachers_dao(d,db)
lg = lg + 1
dt.append(d)
return ResponseModel(msg='上传成功',total=lg,data=dt)