Compare commits

...
Author SHA1 Message Date
geyuan 273bee1ea2 改bug 2026-09-22 13:54:00 +08:00
geyuan 4460a16848 改新buge 2026-09-22 11:00:36 +08:00
geyuan 2c969c7b9c 改buge 2026-09-21 22:22:32 +08:00
geyuan c996fe00f0 增改表 2026-09-21 21:48:36 +08:00
geyuan b9134b6ef1 改掉一些报错 2026-09-21 19:36:29 +08:00
geyuan b28430257c 更改逻辑删除 2026-09-21 16:53:08 +08:00
geyuan 12fb6a7e83 更改老师 2026-09-21 16:28:55 +08:00
geyuan 7fc2dedee6 老师 2026-09-21 11:30:04 +08:00
geyuan b1081d37a9 框架 2026-09-19 18:14:22 +08:00
22 changed files with 395 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 已忽略包含查询文件的默认文件夹
/queries/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="@localhost" uuid="f010600d-8f20-492b-bab2-be2a925ffc75">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>
+12
View File
@@ -0,0 +1,12 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8Inspection" enabled="true" level="INFORMATION" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="E116" />
</list>
</option>
</inspection_tool>
</profile>
</component>
+6
View File
@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="E:\anaconda3\envs\newai0824" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PackageRequirementsSettings" />
<component name="PyDocumentationSettings" />
<component name="ReSTService" />
<component name="TestRunnerService" />
</module>
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="uv (student_manage_system)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/student_manage_system.iml" filepath="$PROJECT_DIR$/.idea/student_manage_system.iml" />
</modules>
</component>
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.10" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
Generated
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
+28
View File
@@ -1 +1,29 @@
# 学生管理系统
## 教师篇
**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数据库建表文件**\
字段名:id、name、sex、class_id、sub(学科)\
home_place specialty(专业)、start_time(入职时间)\
work_experience、collage、creat_date、update_date\
is_delete、delete_time\
**schema 请求体、响应体**\
请求体
响应体
*qingxie* \
***zhongdian***
View File
+46
View File
@@ -0,0 +1,46 @@
from fastapi import APIRouter,Depends,HTTPException
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_response import TeaResponse
tea_api = APIRouter(tags=['老师相关接口'])
@tea_api.post('/tea',response_model=TeaResponse,summary='新增老师',description='输入新增的老师信息,除去姓名外可以为空')
def add_tea(tea: NewTeaRequest,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)): #开启会话窗口
r = get_tea_dao(t.model_dump(),db=db)
if not r:
raise HTTPException(status_code=404,detail='老师不存在')
return TeaResponse(totals=len(r), data=r)
@tea_api.delete('/tea/{id}',summary='删除老师',description='输入删除的老师id')
def delete_tea(id:int|None,db=Depends(get_db)):
r = delete_tea_dao(id,db)
if not r:
raise HTTPException(status_code=500,detail='删除失败!')
return {'detail':'删除成功!'}
@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,t=t,db=db)
if not r:
raise HTTPException(status_code=404,detail='老师不存在')
return {'detail':'更新成功'}
#根据任意信息删除
@tea_api.delete('/tea',summary='根据任意信息逻辑删除',description='输入任意信息删除')
def delete_other_tea_dao1(t:TeaRequest,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}
View File
+105
View File
@@ -0,0 +1,105 @@
from Teachers.model.tea_model import Tea
from datetime import datetime
#增加
def add_tea_dao(t,db):
try:
t1 = Tea(**t)
db.add(t1)
except:
db.rollback()
return False
else:
db.commit()
return True
#更新
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 row
#查询
def get_tea_dao(t,db):
query = db.query(Tea).filter(Tea.is_delete == False)
if t.get('id'):
query = query.filter(Tea.id == t.get('id') )
if t.get('name'):
query = query.filter(Tea.name == t.get('name') )
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('class_id') )
if t.get('sub'):
query = query.filter(Tea.sub == t.get('sub') )
if t.get('home_place'):
query = query.filter(Tea.home_place == t.get('home_place') )
if t.get('specialty'):
query = query.filter(Tea.specialty == t.get('specialty') )
if t.get('start_time'):
query = query.filter(Tea.start_time == t.get('start_time') )
if t. get('work_experience'):
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('collage'):
query = query.filter(Tea.collage == t.get('collage') )
r = query.all()
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} for i in r]
#删除
def delete_tea_dao(id,db):
try:
row = db.query(Tea).filter(Tea.id == id
,Tea.is_delete == False
).update({'is_delete':True,'delete_time':datetime.now()})
except:
db.rollback()
row = 0
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'))
row = query1.update({'is_delete':True,'delete_time':datetime.now()})
db.commit()
return row
except Exception as e:
db.rollback()
print('删除失败',e)
return '删除失败'
+27
View File
@@ -0,0 +1,27 @@
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker,declarative_base
# 导入.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_tea = 'mysql+pymysql://root:123456@127.0.0.1:3306/student_manage_system?charset=utf8mb4'
engine1 = create_engine(db_tea)
Base = declarative_base()
Session = sessionmaker(bind=engine1
,autoflush = False
,autocommit = False)
def get_db():
db = Session()
try:
yield db
finally:
db.close()
Base.metadata.create_all(engine1)
+18
View File
@@ -0,0 +1,18 @@
from fastapi import FastAPI,APIRouter
from Teachers.model.tea_model import *
from api.tea_api import tea_api
Teachers_API = APIRouter()
app = FastAPI()
app.include_router(tea_api)
Base.metadata.create_all(engine1)
if __name__ == "__main__":
import uvicorn
uvicorn.run('main:app', host='0.0.0.0', port=55000)
"""
IPv4 地址 . . . . . . . . . . . . : 192.168.1.51
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1
"""
View File
+48
View File
@@ -0,0 +1,48 @@
from Teachers.database import *
from datetime import datetime
from sqlalchemy import *
import enum
class Gender(str,enum.Enum):
m = '男'
f = '女'
class Tea(Base):
__tablename__ = 'teachers'
id = Column(Integer
, primary_key=True
,nullable=False
,autoincrement=True
,comment='id')
name = Column(String(50)
,nullable=False
,comment='姓名')
sex = Column(Enum(Gender),default='未知'
,comment='性别')
class_id = Column(Integer
,nullable=False
,comment='班级id')
sub = Column(String(50)
,nullable=False
,comment='教学科目')
home_place = Column(String(50)
,comment='家乡')
specialty = Column(String(50)
,comment='专业')
start_time = Column(DateTime,comment='入职时间')
work_experience = Column(String(50)
,comment='工作经验')
education = Column(String(50)
,comment='学历')
collage = Column(String(50)
,comment='毕业院校')
create_date = Column(DateTime
,default=datetime.now
,comment='创建时间')
update_date = Column(DateTime
,onupdate=datetime.now
,comment='更新时间')
is_delete = Column(Boolean,default=False,comment='是否删除')
delete_time = Column(DateTime)
View File
+31
View File
@@ -0,0 +1,31 @@
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
home_place: str|None = None
collage: str|None = None
education: str|None = None
work_experience: str|None = None
start_time: str|None = None
specialty: str|None = None
#更新、任意逻辑删除、新增使用请求体,没有自增键
class NewTeaRequest(BaseModel):
name: str | None = None
sex: Gender
class_id: int | None = None
sub: str | None = None
home_place: 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
+8
View File
@@ -0,0 +1,8 @@
from pydantic import BaseModel
class TeaResponse(BaseModel):
code: int = 200
detail: str = 'OK'
totals:int = 0
data: str |dict|tuple|list
+3
View File
@@ -0,0 +1,3 @@
# 教培系统架构设计与开发##
## 2
### 3