2 Commits
Author SHA1 Message Date
wangtian 571069a862 Merge pull request '老师模块' (#4) from zj into master
Reviewed-on: #4
2026-09-22 17:29:56 +08:00
wangtian 0cb1d8e196 老师模块 2026-09-22 17:29:35 +08:00
7 changed files with 235 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
from fastapi import APIRouter,Depends,HTTPException
from schema.teacher_schema import TeacherRequest,TeacherResponse,TeacherUpdateRequest
from database import get_db
from dao.teacher_dao import add_teacher_dao,update_teacher_dao,get_teacher_dao,delete_teacher_dao
TeacherAPI = APIRouter()
@TeacherAPI.post('/teachers',response_model=TeacherResponse,summary='新增老师')
def add_teachers(teacher:TeacherRequest,db=Depends(get_db)):
d = teacher.model_dump()
r = add_teacher_dao(t=d,db=db)
if not r:
raise HTTPException(status_code=400,detail='教师编号已存在或新增失败!')
return teacher
@TeacherAPI.put('/teachers/{teacher_id}',summary='更新老师')
def update_teachers(teacher_id:str,teacher:TeacherUpdateRequest,db=Depends(get_db)):
d = teacher.model_dump(exclude_unset=True)
r = update_teacher_dao(teacher_id=teacher_id,data=d,db=db) #返回更新的行数
if not r:
raise HTTPException(status_code=404,detail='老师不存在或未更新!')
return {'code':200,'totals':r,'detail':'更新成功'}
@TeacherAPI.get('/teachers',response_model=list[TeacherResponse],summary='查询老师')
def get_teachers(teacher_id:str|None=None,
teacher_name:str|None=None,
db=Depends(get_db)):
r = get_teacher_dao(teacher_id=teacher_id,teacher_name=teacher_name,db=db)
if not r:
raise HTTPException(status_code=404,detail='该老师不存在!')
return r
@TeacherAPI.delete('/teachers/{teacher_id}',summary='删除老师')
def delete_teachers(teacher_id:str|None = None,db=Depends(get_db)):
r = delete_teacher_dao(teacher_id,db)
if not r:
raise HTTPException(status_code=404,detail='老师不存在或删除失败!')
return {'code':200,'totals':r,'detail':'删除成功!'}
+25
View File
@@ -0,0 +1,25 @@
from fastapi import APIRouter,Depends,HTTPException
from schema.teacher_schema import TeacherCourseRequest,TeacherCourseResponse
from database import get_db
from dao.teacher_course_dao import add_teacher_course_dao,get_teacher_course_dao
TeacherCourseAPI = APIRouter()
@TeacherCourseAPI.post('/teacher_courses',response_model=TeacherCourseResponse,summary='新增老师课程')
def add_teacher_courses(teachercourse:TeacherCourseRequest,db=Depends(get_db)):
d = teachercourse.model_dump()
r = add_teacher_course_dao(t=d,db=db)
if not r:
raise HTTPException(status_code=400,detail='新增课程失败!')
return d
@TeacherCourseAPI.get('/teacher_courses',response_model=list[TeacherCourseResponse],summary='查询老师课程')
def get_teacher_courses(teacher_id:str,
db=Depends(get_db)):
r = get_teacher_course_dao(teacher_id=teacher_id,db=db)
if not r:
raise HTTPException(status_code=404,detail='该老师不存在!')
return r
+24
View File
@@ -0,0 +1,24 @@
from model.teacher_model import TeacherCourse
def add_teacher_course_dao(t,db):
try: #判断是都已存在
r = db.query(TeacherCourse).filter(TeacherCourse.teacher_id==t['teacher_id']).first()
if r:
return None #已存在,交给上层判断
obj = TeacherCourse(**t)
db.add(obj)
db.commit()
db.refresh(obj) #拿回自增id,create_time等
return obj
except Exception:
db.rollback()
return False
def get_teacher_course_dao(teacher_id=None,db=None):
q = db.query(TeacherCourse)
if teacher_id:
q = q.filter(TeacherCourse.teacher_id==teacher_id)
return q.all() #返回ORM对象列表
+53
View File
@@ -0,0 +1,53 @@
from model.teacher_model import Teacher
def add_teacher_dao(t,db):
try: #判断是都已存在
r = db.query(Teacher).filter(Teacher.teacher_id==t['teacher_id']).first()
if r:
return None #已存在,交给上层判断
obj = Teacher(**t)
db.add(obj)
db.commit()
db.refresh(obj) #拿回自增id,create_time等
return obj
except Exception:
db.rollback()
return False
def update_teacher_dao(teacher_id,data,db): #data:新增的内容
try: #数据更新有返回值,返回的是影响的行数
rows = db.query(Teacher).filter(Teacher.teacher_id == teacher_id).update(data)
db.commit()
return rows
except Exception:
db.rollback()
return False
def get_teacher_dao(teacher_id=None,teacher_name=None,db=None):
q = db.query(Teacher)
if teacher_id:
q = q.filter(Teacher.teacher_id==teacher_id)
if teacher_name:
q = q.filter(Teacher.teacher_name.like (f'%{teacher_name}%'))
return q.all() #返回ORM对象列表
def delete_teacher_dao(teacher_id,db):
try: #删除有返回值,删除的行数
rows = (db.query(Teacher)
.filter(Teacher.teacher_id == teacher_id)
.delete())
db.commit()
return rows
except Exception:
db.rollback()
return 0
+7
View File
@@ -5,6 +5,8 @@ from api.calss import class_api
from api.employment_api import app as employment_router from api.employment_api import app as employment_router
from api.student_info_api import student_info_api from api.student_info_api import student_info_api
from api.region_api import region_api from api.region_api import region_api
from api.teacher_api import TeacherAPI
from api.teacher_course_api import TeacherCourseAPI
from starlette.middleware.cors import CORSMiddleware from starlette.middleware.cors import CORSMiddleware
@@ -24,6 +26,11 @@ app.include_router(student_info_api,tags=['学生信息'])
app.include_router(region_api,tags=['地区信息']) app.include_router(region_api,tags=['地区信息'])
app.include_router(TeacherAPI,tags=['老师信息'])
app.include_router(TeacherCourseAPI,tags=['老师课程信息'])
app.include_router(employment_router) app.include_router(employment_router)
+40
View File
@@ -0,0 +1,40 @@
from database import DATETIME,Base,engine
from datetime import datetime
from sqlalchemy import Column,String,Date,Integer
class Teacher(Base):
__tablename__ = 'teacher_info'
id = Column(Integer,primary_key=True,autoincrement=True,comment='自增主键id')
teacher_id = Column(String(20),nullable=False,unique=True,comment='教师编号')
teacher_name = Column(String(50),nullable=False,comment='老师姓名')
gender = Column(Integer,nullable=False,comment='性别:0=女,1=男')
birthday = Column(Date,nullable=True,comment='出生年月')
native_region_code = Column(String(12),nullable=True,comment='籍贯地区编码')
email = Column(String(100),nullable=True,comment='邮箱')
phone = Column(String(11),nullable=False,comment='手机号')
graduation_school = Column(String(20),nullable=True,comment='毕业院校')
is_deleted = Column(Integer,nullable=False,default=0,comment='逻辑删除:0=未删除,1=已删除')
create_time = Column(DATETIME,nullable=False,default=datetime.now,comment='创建时间')
update_time = Column(DATETIME,default=datetime.now,onupdate=datetime.now,comment='更新时间')
class TeacherCourse(Base):
__tablename__ = 'teacher_course'
id = Column(Integer,primary_key=True,autoincrement=True,comment='记录ID')
teacher_id = Column(String(20),nullable=False,comment='教师编号')
course_id = Column(String(20),nullable=False,comment='任课科目编号')
is_deleted = Column(Integer,nullable=False,default=0,comment='逻辑删除:0=未删除,1=已删除')
create_time = Column(DATETIME,nullable=False,default=datetime.now,comment='创建时间')
update_time = Column(DATETIME,nullable=False,default=datetime.now,onupdate=datetime.now,comment='更新时间')
if __name__ == "__main__":
Base.metadata.create_all(engine)
print("数据表创建完成!")
+45
View File
@@ -0,0 +1,45 @@
from pydantic import BaseModel
from datetime import date
from typing import Literal
class TeacherRequest(BaseModel): #Teacher请求体模型
teacher_id: str
teacher_name: str
gender: Literal[1,0]
birthday: date|None = None
native_region_code: str|None = None
email: str|None = None
phone: str
graduation_school: str|None = None
class TeacherUpdateRequest(BaseModel):
teacher_name: str|None = None
gender: Literal[1,0]|None = None
birthday: date | None = None
native_region_code: str | None = None
email: str | None = None
phone: str
graduation_school: str | None = None
class TeacherResponse(BaseModel): #Teacher响应体模型
teacher_id: str
teacher_name: str
gender: Literal[1,0]
birthday: date|None = None
native_region_code: str|None = None
email: str|None = None
phone: str
graduation_school: str|None = None
class TeacherCourseRequest(BaseModel): #TeacherCourse请求体模型
teacher_id: str|None = None
course_id: str|None = None
class TeacherCourseResponse(BaseModel): #老师带班信息及课程表响应体模型
teacher_id: str|None = None
course_id: str|None = None
model_config = {"from_attributes": True} #可以直接读取ORM模型对象,不用手动转字典