Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be1edae34c | ||
|
|
daed5971ea | ||
|
|
6de3d1dd22 | ||
|
|
a415a7c35e | ||
|
|
d99eb7367d | ||
|
|
273bee1ea2 | ||
|
|
4460a16848 |
@@ -1 +1,32 @@
|
||||
# 学生管理系统
|
||||
## 教师篇
|
||||
|
||||
**main:主程序文件、测试接口**\
|
||||
1 下面所有配置文件的接口全部导入并建表\
|
||||
2 创建fastapi接口并本地运行\
|
||||
**api:接口文件**\
|
||||
*教师表Teacher的功能接口:*\
|
||||
1.教师信息的查询\
|
||||
2.教师信息的新增\
|
||||
3.教师信息的更新\
|
||||
4.教师信息的逻辑删除\
|
||||
**dao数据筛选文件**\
|
||||
1.查询 get_tea_dao:\
|
||||
2.新增 add_tea_dao:\
|
||||
3.更新 update_tea_dao:\
|
||||
4.逻辑删除 delete_tea_dao:\
|
||||
**tea_model数据库建表文件**\
|
||||
1.教师表\
|
||||
字段名:id、name、sex、class_id、sub(学科)\
|
||||
home_place specialty(专业)、start_time(入职时间)\
|
||||
work_experience、collage、creat_date、update_date\
|
||||
is_delete、delete_time\
|
||||
2.学科表\
|
||||
字段名:id,name(科目名字)
|
||||
**schema 请求体、响应体**\
|
||||
请求体:设置了两个,一个带自增组件用于查询\
|
||||
一个不带自增组件,新增用;\
|
||||
响应体:用于返回给前端
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# .env(放项目根目录,每个人自己建,不提交 Git)
|
||||
# 用来修改数据库账户密码
|
||||
DB_USER=root
|
||||
DB_PASSWORD=123456
|
||||
DB_HOST=localhost
|
||||
DB_PORT=3306
|
||||
DB_NAME=student_manage_system
|
||||
+17
-7
@@ -3,19 +3,19 @@ from Teachers.schema import *
|
||||
from Teachers.database import *
|
||||
from Teachers.model.tea_model import *
|
||||
from Teachers.dao.tea_dao import *
|
||||
from Teachers.schema.tea_request import TeaRequest,NewTeaRequest
|
||||
from Teachers.schema.tea_request import TeaRequest,NewTeaRequest,NewTeaRequest1
|
||||
from Teachers.schema.tea_response import TeaResponse
|
||||
|
||||
tea_api = APIRouter(tags=['老师相关接口'])
|
||||
tea_api = APIRouter()
|
||||
|
||||
@tea_api.post('/tea',response_model=TeaResponse,summary='新增老师',description='输入新增的老师信息,除去姓名外可以为空')
|
||||
def add_tea(tea: NewTeaRequest,db=Depends(get_db)):
|
||||
def add_tea(tea: NewTeaRequest=Depends(),db=Depends(get_db)):
|
||||
r = add_tea_dao(tea.model_dump(),db)
|
||||
if not r:
|
||||
raise HTTPException(status_code=500,detail='添加失败!')
|
||||
return TeaResponse(totals=1,data=tea.model_dump())
|
||||
@tea_api.get('/tea',response_model=TeaResponse,summary='查询老师',description='任意选择输入的信息数量,不输入则查询全部老师')
|
||||
def get_tea(t:TeaRequest=Depends(),db=Depends(get_db)): #开启会话窗口
|
||||
def get_tea(t:NewTeaRequest1=Depends(),db=Depends(get_db)): #开启会话窗口
|
||||
r = get_tea_dao(t.model_dump(),db=db)
|
||||
if not r:
|
||||
raise HTTPException(status_code=404,detail='老师不存在')
|
||||
@@ -27,10 +27,20 @@ def delete_tea(id:int|None,db=Depends(get_db)):
|
||||
raise HTTPException(status_code=500,detail='删除失败!')
|
||||
return {'detail':'删除成功!'}
|
||||
|
||||
@tea_api.put('/tea/{id}',summary='修改老师信息',description='输入更改的信息,老师的姓名和性别不能为空,其余可以为空')
|
||||
@tea_api.put('/tea/{id}',summary='更新老师信息',description='输入更改的信息,可以为空')
|
||||
def update_tea(id:int,tea:NewTeaRequest,db=Depends(get_db)):
|
||||
t = tea.model_dump(exclude_unset= True)
|
||||
r = update_tea_dao(id=id,update_data=t,db=db)
|
||||
r = update_tea_dao(id=id,t=t,db=db)
|
||||
if not r:
|
||||
raise HTTPException(status_code=404,detail='老师不存在')
|
||||
return {'detail':'修改成功'}
|
||||
return {'detail':'更新成功'}
|
||||
|
||||
#根据任意信息删除
|
||||
@tea_api.delete('/tea',summary='根据任意信息逻辑删除',description='输入任意信息删除')
|
||||
def delete_other_tea_dao1(t:TeaRequest=Depends(),db=Depends(get_db)):
|
||||
row1 = delete_other_tea_dao(t.model_dump(exclude_unset=True),db)
|
||||
if not row1:
|
||||
raise HTTPException(status_code=404,detail='没有找到符合条件的老师')
|
||||
return{'code':200,'data':row1}
|
||||
|
||||
|
||||
|
||||
+72
-20
@@ -4,27 +4,38 @@ from datetime import datetime
|
||||
#增加
|
||||
def add_tea_dao(t,db):
|
||||
try:
|
||||
not_delete = db.query(Tea).filter(Tea.phone ==t.get('phone'),Tea.is_delete == False).first()
|
||||
if not_delete:
|
||||
print('该老师已存在')
|
||||
raise Exception('老师已存在')
|
||||
existing = db.query(Tea).filter(Tea.phone == t.get('phone'),Tea.is_delete == True).first()
|
||||
if existing:
|
||||
for key,value in t.items():
|
||||
if hasattr(existing,key) and value is not None and value != '':
|
||||
setattr(existing,key,value)
|
||||
existing.is_delete = False
|
||||
db.commit()
|
||||
return '恢复修改成功'
|
||||
t1 = Tea(**t)
|
||||
db.add(t1)
|
||||
db.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
db.rollback()
|
||||
print('新增失败原因',e)
|
||||
return '新增失败'
|
||||
|
||||
|
||||
#更新
|
||||
def update_tea_dao(id,t, db):
|
||||
try:
|
||||
row = db.query(Tea).filter(Tea.id == id,Tea.is_delete ==False ).update(t)
|
||||
except:
|
||||
db.rollback()
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return True
|
||||
|
||||
#更新
|
||||
def add_tea_dao(t, db):
|
||||
try:
|
||||
t1 = Tea(**t)
|
||||
db.add(t1)
|
||||
except Exception as e:
|
||||
db.rollback()
|
||||
print('新增失败原因:', e)
|
||||
return False
|
||||
else:
|
||||
db.commit()
|
||||
return True
|
||||
return row
|
||||
|
||||
#查询
|
||||
def get_tea_dao(t,db):
|
||||
@@ -36,7 +47,7 @@ def get_tea_dao(t,db):
|
||||
if t.get("sex"):
|
||||
query = query.filter(Tea.sex == t.get('sex') )
|
||||
if t.get('class_id'):
|
||||
query = query.filter(Tea.class_id == t.get('claa_id') )
|
||||
query = query.filter(Tea.class_id == t.get('class_id') )
|
||||
if t.get('sub'):
|
||||
query = query.filter(Tea.sub == t.get('sub') )
|
||||
if t.get('home_place'):
|
||||
@@ -49,11 +60,14 @@ def get_tea_dao(t,db):
|
||||
query = query.filter(Tea.work_experience == t.get('work_experience') )
|
||||
if t.get('education'):
|
||||
query = query.filter(Tea.education == t.get('education') )
|
||||
if t.get('college'):
|
||||
query = query.filter(Tea.collage == t.get('college') )
|
||||
if t.get('collage'):
|
||||
query = query.filter(Tea.collage == t.get('collage') )
|
||||
if t.get('phone'):
|
||||
query = query.filter(Tea.phone == t.get('phone') )
|
||||
r = query.all()
|
||||
return [{'id':i.id,'name':i.name,'class_id':i.class_id,'sub':i.sub,'tea.sex':i.sex,'home_place':i.home_place
|
||||
,'specialty':i.specialty,'start_time':i.start_time,'work_experience':i.work_experience,'college':i.college} for i in r]
|
||||
return [{'id':i.id,'name':i.name,'class_id':i.class_id,'sub':i.sub,'sex':i.sex,'home_place':i.home_place
|
||||
,'specialty':i.specialty,'start_time':i.start_time,'work_experience':i.work_experience
|
||||
,'collage':i.collage,'phone':i.phone} for i in r]
|
||||
|
||||
#删除
|
||||
def delete_tea_dao(id,db):
|
||||
@@ -64,9 +78,47 @@ def delete_tea_dao(id,db):
|
||||
except:
|
||||
db.rollback()
|
||||
row = 0
|
||||
return
|
||||
return row
|
||||
else:
|
||||
db.commit()
|
||||
return row
|
||||
|
||||
def delete_other_tea_dao(t,db):
|
||||
if not t:
|
||||
return False
|
||||
try:
|
||||
query1 = db.query(Tea).filter(Tea.is_delete == False)
|
||||
if t.get('id'):
|
||||
query1 = query1.filter(Tea.id == t.get('id') )
|
||||
if t.get('name'):
|
||||
query1 = query1.filter(Tea.name == t.get('name') )
|
||||
if t.get('sex'):
|
||||
query1 = query1.filter(Tea.sex == t.get('sex'))
|
||||
if t.get('class_id'):
|
||||
query1 = query1.filter(Tea.class_id == t.get('class_id'))
|
||||
if t.get('sub'):
|
||||
query1 = query1.filter(Tea.sub == t.get('sub'))
|
||||
if t.get('home_place'):
|
||||
query1 = query1.filter(Tea.home_place == t.get('home_place'))
|
||||
if t.get('collage'):
|
||||
query1 = query1.filter(Tea.collage == t.get('collage'))
|
||||
if t.get('education'):
|
||||
query1 = query1.filter(Tea.education == t.get('education'))
|
||||
if t.get('work_experience'):
|
||||
query1 = query1.filter(Tea.work_experience == t.get('work_experience'))
|
||||
if t.get('start_time'):
|
||||
query1 = query1.filter(Tea.start_time == t.get('start_time'))
|
||||
if t.get('specialty'):
|
||||
query1 = query1.filter(Tea.specialty == t.get('specialty'))
|
||||
if t.get('phone'):
|
||||
query1 = query1.filter(Tea.phone == t.get('phone'))
|
||||
row = query1.update({'is_delete':True,'delete_time':datetime.now()})
|
||||
db.commit()
|
||||
return row
|
||||
except Exception as e:
|
||||
db.rollback()
|
||||
print('删除失败',e)
|
||||
return '删除失败'
|
||||
|
||||
|
||||
|
||||
|
||||
+12
-2
@@ -1,8 +1,18 @@
|
||||
from sqlalchemy import *
|
||||
from sqlalchemy.orm import sessionmaker,declarative_base
|
||||
|
||||
db_tea = 'mysql+pymysql://root:123456@127.0.0.1:3306/student_manage_system?charset=utf8mb4'
|
||||
engine1 = create_engine(db_tea)
|
||||
# 导入.env参数
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv( )
|
||||
DB_USER = os.getenv("DB_USER", "root")
|
||||
DB_PASSWORD = os.getenv("DB_PASSWORD", "")
|
||||
DB_HOST = os.getenv("DB_HOST", "localhost")
|
||||
DB_PORT = os.getenv("DB_PORT", "3306")
|
||||
DB_NAME = os.getenv("DB_NAME", "student_manage_system")
|
||||
|
||||
db_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4"
|
||||
engine1 = create_engine(db_url)
|
||||
|
||||
Base = declarative_base()
|
||||
Session = sessionmaker(bind=engine1
|
||||
|
||||
+9
-3
@@ -1,8 +1,14 @@
|
||||
from fastapi import FastAPI
|
||||
from fastapi import FastAPI,APIRouter
|
||||
from Teachers.model.tea_model import *
|
||||
from api.tea_api import tea_api
|
||||
from Teachers.api.tea_api import tea_api
|
||||
|
||||
# 合并接口
|
||||
Teachers_API = APIRouter()
|
||||
Teachers_API.include_router(tea_api)
|
||||
|
||||
# 自测接口
|
||||
app = FastAPI()
|
||||
app.include_router(tea_api)
|
||||
app.include_router(tea_api,tags=["老师"])
|
||||
|
||||
Base.metadata.create_all(engine1)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import enum
|
||||
class Gender(str,enum.Enum):
|
||||
m = '男'
|
||||
f = '女'
|
||||
h = '未知'
|
||||
|
||||
class Tea(Base):
|
||||
__tablename__ = 'teachers'
|
||||
@@ -22,7 +23,9 @@ class Tea(Base):
|
||||
class_id = Column(Integer
|
||||
,nullable=False
|
||||
,comment='班级id')
|
||||
sub = Column(String(50)
|
||||
phone = Column(String(50))
|
||||
subject_id = Column(Integer
|
||||
, ForeignKey('subject.id')
|
||||
,nullable=False
|
||||
,comment='教学科目')
|
||||
home_place = Column(String(50)
|
||||
@@ -44,5 +47,15 @@ class Tea(Base):
|
||||
,comment='更新时间')
|
||||
is_delete = Column(Boolean,default=False,comment='是否删除')
|
||||
delete_time = Column(DateTime)
|
||||
|
||||
#科目表
|
||||
class Sub(Base):
|
||||
__tablename__ = 'subject'
|
||||
id = Column(Integer
|
||||
, primary_key=True
|
||||
, nullable=False
|
||||
, autoincrement=True
|
||||
, comment='id')
|
||||
name = Column(String(50)
|
||||
,nullable=False
|
||||
,comment='科目名字')
|
||||
|
||||
|
||||
@@ -1,31 +1,45 @@
|
||||
from pydantic import BaseModel
|
||||
from Teachers.model.tea_model import *
|
||||
|
||||
#查询使用请求体
|
||||
#查询使用请求体,都可以为空
|
||||
class TeaRequest(BaseModel):
|
||||
id: int|None = None
|
||||
name: str|None = None
|
||||
sex: Gender|None = None
|
||||
class_id: int | None = None
|
||||
sub: str|None = None
|
||||
phone: str|None = None
|
||||
home_place: str|None = None
|
||||
collage: str|None = None
|
||||
education: str|None = None
|
||||
work_experience: str|None = None
|
||||
start_time: str|None = None
|
||||
start_time: datetime|None = None
|
||||
specialty: str|None = None
|
||||
|
||||
|
||||
#更新、新增使用请求体(无法覆盖)
|
||||
#更新、任意逻辑删除、新增使用请求体,没有自增键,电话号码不能为空
|
||||
class NewTeaRequest(BaseModel):
|
||||
name: str | None = None
|
||||
sex: Gender
|
||||
sex: Gender|None = None
|
||||
class_id: int | None = None
|
||||
sub: str | None = None
|
||||
home_place: str | None = None
|
||||
phone: str
|
||||
collage: str | None = None
|
||||
education: str | None = None
|
||||
work_experience: str | None = None
|
||||
start_time: datetime | None = None
|
||||
specialty: str | None = None
|
||||
|
||||
class NewTeaRequest1(BaseModel):
|
||||
name: str | None = None
|
||||
sex: Gender|None = None
|
||||
class_id: int | None = None
|
||||
sub: str | None = None
|
||||
home_place: str | None = None
|
||||
phone: str|None = None
|
||||
collage: str | None = None
|
||||
education: str | None = None
|
||||
work_experience: str | None = None
|
||||
start_time: datetime | None = None
|
||||
specialty: str | None = None
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# 教培系统架构设计与开发##
|
||||
## 2
|
||||
### 3
|
||||
Reference in New Issue
Block a user