Compare commits

...

8 Commits

Author SHA1 Message Date
lrs 2944987428 Further improvement of teacher functions
1 year ago
lrs cc79137b3c Further improvement of teacher functions
1 year ago
lrs f0f04b1320 Further improvement of teacher functions
1 year ago
lrs 7bc09e1bc6 Further improvement of teacher functions
1 year ago
lrs 1fa138dd24 Further improvement of teacher functions
1 year ago
lrs fd5e26b71a Further improvement of teacher functions
1 year ago
lrs d2b971806f Further improvement of teacher functions
1 year ago
lrs e2f26fff22 update code
1 year ago

@ -44,7 +44,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
# 'corsheaders',
'API',
'Student',
'teacher',
@ -60,7 +60,7 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
# 'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
# 'API.middle.AuthMiddleware',
]

@ -16,26 +16,16 @@ Including another URLconf
from django.contrib import admin
from django.urls import path, include
from API.views import login, get_user_info
<<<<<<< Updated upstream
=======
>>>>>>> Stashed changes
urlpatterns = [
path('Eduadmin/', admin.site.urls),
path('api/', include(("API.urls", "api"), namespace="api")),
<<<<<<< Updated upstream
=======
<<<<<<< Updated upstream
>>>>>>> Stashed changes
path('teacher/', include(("teacher.urls", "teacher"), namespace="teacher")),
path('student/', include(("Student.urls", "student"), namespace="student")),
path('course/', include(("course.urls", "course"), namespace="course")),
=======
path('student/', include(("Student.urls", "studnet"), namespace="student")),
>>>>>>> Stashed changes
path('login', login),
path('userinfo', get_user_info),
path('admin/', include(("Eduadmin.urls", "admin"), namespace="admin")),
]

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
# Time : 2023/9/12 9:37
# Author : lirunsheng
# User : l'r's
# Software: PyCharm
# File : urls.py
from django.urls import path
from .views import *
urlpatterns = [
path("teacher/", teacher_manage),
path('course/',course_selection)
]

@ -1,3 +1,216 @@
from django.shortcuts import render
# Create your views here.
from django.http import JsonResponse, HttpResponseBadRequest, HttpResponse
from teacher.models import Teacher
from django.views.decorators.csrf import csrf_exempt
from io import BytesIO
from django.http.multipartparser import MultiPartParser
from django.http import QueryDict
from course.models import Course, SC
from Student.models import Student
from django.db.models import Q
from django.db.models import Subquery, OuterRef
from django.core.exceptions import ObjectDoesNotExist
from ast import literal_eval
from MySQLdb import IntegrityError
from EduSystemServer.utils import ResponseUtil
@csrf_exempt
def teacher_manage(request): # 教师个人信息修改
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
name = request.POST.get('name')
sex = request.POST.get('sex')
title = request.POST.get('title')
education = request.POST.get('education')
dept = request.POST.get('dept')
if (username and password and name and sex
and title and education and dept):
try:
teacher = Teacher()
teacher.username = username
teacher.password = password
teacher.name = name
teacher.sex = sex
teacher.title = title
teacher.education = education
teacher.dept = dept
teacher.save()
response = ResponseUtil.ok(teacher.to_dict(), "老师信息插入成功")
return JsonResponse(response)
except:
response = ResponseUtil.error("老师信息插入未成功,用户名重复!")
return JsonResponse(response)
else:
response = ResponseUtil.error("老师信息插入未成功,存在空值,请你仔细检测并上传")
return JsonResponse(response)
elif request.method == "GET":
name = request.GET.get('name')
sex = request.GET.get('sex')
title = request.GET.get('title')
education = request.GET.get('education')
dept = request.GET.get('dept')
# 定义空查询条件
conditions = Q()
if name:
conditions &= Q(name=name)
if sex:
conditions &= Q(sex=sex)
if title:
conditions &= Q(title=title)
if education:
conditions &= Q(education=education)
if dept:
conditions &= Q(dept=dept)
# 添加非空查询条件至基本查询集
query = Teacher.objects.filter(conditions)
data = query.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
print(query)
response = ResponseUtil.ok(data, "老师信息查询成功")
return JsonResponse(response)
elif request.method == "DELETE":
# parser = MultiPartParser(request.META, BytesIO(request.body), request.upload_handlers, request.encoding)
# posdict = parser.parse()
# print(posdict)
# tid = int(posdict[0]['tid'])
# print(tid)
# try:
# info = Teacher.objects.filter(tid=tid).get().to_dict()
# Teacher.objects.filter(tid=tid).delete()
# response = ResponseUtil.ok(info, "老师信息删除成功")
# return JsonResponse(response)
# except:
# response = ResponseUtil.error("删除失败,未找到老师信息!")
# return JsonResponse(response)
parser = MultiPartParser(request.META, BytesIO(request.body), request.upload_handlers, request.encoding)
posdict = parser.parse()
# print(posdict)
tids = posdict[0]['tids']
# print(tids)
tids = literal_eval(tids)
# print(tids)
try:
info = Teacher.objects.filter(tid__in=tids).values()
data = list(info)
if len(data) > 0:
Teacher.objects.filter(tid__in=tids).delete()
response = ResponseUtil.ok(data, "老师信息删除成功")
return JsonResponse(response)
else:
response = ResponseUtil.error("老师未找到")
return JsonResponse(response)
except:
response = ResponseUtil.ok("未查询到老师信息,删除失败")
return JsonResponse(response)
elif request.method == 'PUT':
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
# request.PUT = put[0]
print(put)
tid = put[0]['tid']
name = put[0]['name']
sex = put[0]['sex']
title = put[0]['title']
education = put[0]['education']
dept = put[0]['dept']
if name and sex and title and education and dept:
Teacher.objects.filter(tid=tid).update(name=name,sex=sex,title=title)
Teacher.objects.filter(tid=tid).update(education=education,dept=dept)
data = Teacher.objects.filter(tid=tid)[0].to_dict()
response = ResponseUtil.ok(data, "修改老师信息成功!")
return JsonResponse(response)
else:
response = ResponseUtil.error("修改信息有误!")
return JsonResponse(response)
@csrf_exempt
def course_selection(request): # 选课管理
if request.method == 'POST':
# 假设需要将 tid 为 1 的老师赋值给某个课程的 tid 字段
teacher_id = request.POST.get('tid')
name = request.POST.get('name')
type = request.POST.get('type')
credit = request.POST.get('credit')
if name and type and credit:
try:
teacher_id = int(teacher_id)
course = Course()
course.name = name
course.type = type
course.credit = int(credit)
course.tid = Teacher.objects.get(tid=teacher_id) # 将 Teacher 对象赋给 Course.tid 字段
course.save()
response = ResponseUtil.ok(course.tid_dict(), "课程信息插入成功")
return JsonResponse(response)
except ObjectDoesNotExist:
response = ResponseUtil.error("找不到 id 为 " + str(teacher_id)+" 的老师")
return JsonResponse(response)
except ValueError:
response = ResponseUtil.error("插入数据失败: tid_id 列不能为 null")
return JsonResponse(response)
if request.method == 'GET':
cid = request.GET.get('cid')
name = request.GET.get('name')
type = request.GET.get('type')
credit = request.GET.get('credit')
tid = request.GET.get('tid')
# 定义空查询条件
conditions = Q()
if cid:
conditions &= Q(cid=int(cid))
if name:
conditions &= Q(name=name)
if type:
conditions &= Q(type=type)
if credit:
conditions &= Q(credit=credit)
if tid:
tid = int(tid)
conditions &= Q(tid=tid)
# 添加非空查询条件至基本查询集
query = Course.objects.filter(conditions)
data = query.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
print(query)
response = ResponseUtil.ok(data, "课程信息查询成功")
return JsonResponse(response)
if request.method == 'DELETE':
parser = MultiPartParser(request.META, BytesIO(request.body), request.upload_handlers, request.encoding)
posdict = parser.parse()
cids = posdict[0]['cids']
cids = literal_eval(cids)
print(cids)
try:
info = Course.objects.filter(cid__in=cids).values()
data = list(info)
if len(data)>0:
Course.objects.filter(cid__in=cids).delete()
response = ResponseUtil.ok(data, "课程信息删除成功")
return JsonResponse(response)
else:
response = ResponseUtil.error("课程未找到")
return JsonResponse(response)
except:
response = ResponseUtil.ok("未查询到课程,删除失败")
return JsonResponse(response)
if request.method == 'PUT':
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
# request.PUT = put[0]
print(put)
cid = put[0]['cid']
name = put[0]['name']
type = put[0]['type']
credit = put[0]['credit']
tid = put[0]['tid']
if cid and name and type and credit and tid:
Course.objects.filter(cid=cid).update(name=name, type=type, credit=credit)
Course.objects.filter(cid=cid).update(tid=Teacher.objects.get(tid=tid))
data = Course.objects.filter(cid=cid)[0].tid_dict()
response = ResponseUtil.ok(data, "课程信息修改成功")
return JsonResponse(response)
else:
response = ResponseUtil.error("课程信息修改失败,信息不全")
return JsonResponse(response)

@ -12,37 +12,37 @@ class Migration(migrations.Migration):
operations = [
migrations.AlterField(
model_name='student',
name='s_class_name',
name='class_name',
field=models.CharField(blank=True, max_length=50, verbose_name='班级'),
),
migrations.AlterField(
model_name='student',
name='s_grade',
name='grade',
field=models.CharField(blank=True, max_length=20, verbose_name='年级'),
),
migrations.AlterField(
model_name='student',
name='s_major',
name='major',
field=models.CharField(blank=True, max_length=50, verbose_name='专业名称'),
),
migrations.AlterField(
model_name='student',
name='s_name',
name='name',
field=models.CharField(blank=True, max_length=100, verbose_name='姓名'),
),
migrations.AlterField(
model_name='student',
name='s_password',
name='password',
field=models.CharField(blank=True, max_length=100, verbose_name='密码'),
),
migrations.AlterField(
model_name='student',
name='s_sex',
name='sex',
field=models.CharField(blank=True, max_length=4, verbose_name='性别'),
),
migrations.AlterField(
model_name='student',
name='s_username',
name='username',
field=models.CharField(blank=True, max_length=30, verbose_name='用户名称'),
),
migrations.AlterField(

@ -0,0 +1,41 @@
# Generated by Django 3.2.13 on 2023-09-08 11:57
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('Student', '0002_auto_20230907_0916'),
]
operations = [
migrations.RemoveField(
model_name='student',
name='class_name',
),
migrations.RemoveField(
model_name='student',
name='grade',
),
migrations.RemoveField(
model_name='student',
name='major',
),
migrations.RemoveField(
model_name='student',
name='name',
),
migrations.RemoveField(
model_name='student',
name='password',
),
migrations.RemoveField(
model_name='student',
name='sex',
),
migrations.RemoveField(
model_name='student',
name='username',
),
]

@ -4,38 +4,6 @@ from django.db import models
# Create your models here.
class Student(models.Model):
sid = models.AutoField(primary_key=True, verbose_name="学生编号", name="sid")
<<<<<<< Updated upstream
=======
<<<<<<< Updated upstream
>>>>>>> Stashed changes
<<<<<<< HEAD
s_username = models.CharField(max_length=30, verbose_name="用户名称", name="s_username", blank=True)
s_password = models.CharField(max_length=100, verbose_name="密码", name="s_password", blank=True)
s_name = models.CharField(max_length=100, verbose_name="姓名", name="s_name", blank=True)
s_sex = models.CharField(max_length=4, verbose_name="性别", name="s_sex", blank=True)
s_grade = models.CharField(max_length=20, verbose_name="年级", name="s_grade", blank=True)
s_class_name = models.CharField(max_length=50, verbose_name="班级", name="s_class_name", blank=True)
s_major = models.CharField(max_length=50, verbose_name="专业名称", name="s_major", blank=True)
def to_dict(self):
return {"sid": self.sid, "s_name": self.s_name, "s_username": self.s_username, "s_password": self.s_password,
"s_sex": self.s_sex, "s_grade": self.s_grade, "class_name": self.s_class_name, "s_major": self.s_major}
=======
username = models.CharField(max_length=30, verbose_name="用户名称", name="username", blank=True)
password = models.CharField(max_length=100, verbose_name="密码", name="password", blank=True)
name = models.CharField(max_length=100, verbose_name="姓名", name="name", blank=True)
sex = models.CharField(max_length=4, verbose_name="性别", name="sex", blank=True)
grade = models.CharField(max_length=20, verbose_name="年级", name="grade", blank=True)
class_name = models.CharField(max_length=50, verbose_name="班级", name="class_name", blank=True)
major = models.CharField(max_length=50, verbose_name="专业名称", name="major", blank=True)
def to_dict(self):
return {"sid": self.sid, "name": self.name, "username": self.username, "password": self.password,
"sex": self.sex, "grade": self.grade, "class_name": self.class_name, "major": self.major}
>>>>>>> 7b09141c358f80dd8877b8665d0d55b629db72aa
<<<<<<< Updated upstream
=======
=======
username = models.CharField(max_length=30, verbose_name="用户名称", name="username", blank=True)
password = models.CharField(max_length=100, verbose_name="密码", name="password", blank=True)
name = models.CharField(max_length=100, verbose_name="姓名", name="name", blank=True)
@ -47,8 +15,6 @@ class Student(models.Model):
def to_dict(self):
return {"sid": self.sid, "name": self.name, "username": self.username, "password": self.password,
"sex": self.sex, "grade": self.grade, "class_name": self.class_name, "major": self.major}
>>>>>>> Stashed changes
>>>>>>> Stashed changes
class Meta:
db_table = "student"

@ -2,22 +2,15 @@ from django.shortcuts import render
# Create your views here.
from django.http import JsonResponse
<<<<<<< Updated upstream
from .models import Student
=======
<<<<<<< HEAD
from EduSystemServer.utils import ResponseUtil
from Student.models import Student
=======
from .models import Student
>>>>>>> 1e084d20f30e0b66d5e309a483f87ce5cfe06c39
>>>>>>> Stashed changes
from django.views.decorators.csrf import csrf_exempt
from django.http import QueryDict
from io import BytesIO
from django.http.multipartparser import MultiPartParser
import json
@csrf_exempt
def studnets(request):

@ -12,12 +12,12 @@ class Migration(migrations.Migration):
operations = [
migrations.AlterField(
model_name='course',
name='c_name',
name='name',
field=models.CharField(blank=True, max_length=255, verbose_name='课程名称'),
),
migrations.AlterField(
model_name='course',
name='c_type',
name='type',
field=models.CharField(blank=True, max_length=128, verbose_name='课程类型'),
),
]

@ -16,6 +16,9 @@ class Course(models.Model):
return {"cid": self.cid, "c_name": self.name, "type": self.type, "credit": self.credit,
"tid": self.tid}
def tid_dict(self):
return {"cid": self.cid, "c_name": self.name, "type": self.type, "credit": self.credit,
"tid": self.tid.tid}
class Meta:
db_table = "course"
verbose_name = "课程"

@ -7,7 +7,6 @@ from django.views.decorators.csrf import csrf_exempt
from io import BytesIO
from django.http.multipartparser import MultiPartParser
@csrf_exempt
def courses(request):
if request.method == "POST":
@ -30,7 +29,7 @@ def courses(request):
for item in filtered:
data.append(item.to_dict())
elif c_name:
filtered = Course.objects.filter(c_name=c_name)
filtered = Course.objects.filter(name=c_name)
for item in filtered:
data.append(item.to_dict())
elif c_type:

@ -12,27 +12,27 @@ class Migration(migrations.Migration):
operations = [
migrations.AlterField(
model_name='teacher',
name='t_dept',
name='dept',
field=models.CharField(blank=True, max_length=128, verbose_name='教师所属院系'),
),
migrations.AlterField(
model_name='teacher',
name='t_education',
name='education',
field=models.CharField(blank=True, max_length=128, verbose_name='教师学历'),
),
migrations.AlterField(
model_name='teacher',
name='t_name',
name='name',
field=models.CharField(blank=True, max_length=255, verbose_name='教师名称'),
),
migrations.AlterField(
model_name='teacher',
name='t_sex',
name='sex',
field=models.CharField(blank=True, max_length=128, verbose_name='教师性别'),
),
migrations.AlterField(
model_name='teacher',
name='t_title',
name='title',
field=models.CharField(blank=True, max_length=128, verbose_name='教师职称'),
),
]

@ -12,5 +12,10 @@ from .views import *
urlpatterns = [
path("", teacher),
path('delete/',delete),
path('student/',student_performance_management)
path('student/',student_performance_management),
path('query/',query_student_information),
path('course/',teaching_resources),
path('selection/',course_selection),
path('management/',student_management),
path('select/',SC_selection)
]

@ -1,3 +1,4 @@
from MySQLdb import IntegrityError
from django.shortcuts import render
# Create your views here.
@ -9,21 +10,29 @@ from django.views.decorators.csrf import csrf_exempt
from io import BytesIO
from django.http.multipartparser import MultiPartParser
from django.http import QueryDict
from course.models import Course,SC
from course.models import Course, SC
from Student.models import Student
import json
from django.db.models import Q
from django.db.models import Subquery, OuterRef
from django.core.exceptions import ObjectDoesNotExist
from EduSystemServer.utils import ResponseUtil
@csrf_exempt
def teacher(request):
def teacher(request): # 教师个人信息修改
if request.method == "POST":
teacher_information = Teacher()
teacher_information.username = request.POST.get('username')
teacher_information.password = request.POST.get('password')
teacher_information.name = request.POST.get('name')
teacher_information.sex = request.POST.get('sex')
teacher_information.title = request.POST.get('title')
teacher_information.education = request.POST.get('education')
teacher_information.dept = request.POST.get('dept')
teacher_information.save()
print(teacher_information.name)
return JsonResponse({'code': 200, 'msg': 'success',"data": teacher_information.to_dict()}, safe=False)
response = ResponseUtil.ok(teacher_information.to_dict(), "老师信息插入成功")
return JsonResponse(response)
elif request.method == "GET":
name = request.GET.get('name')
@ -31,32 +40,25 @@ def teacher(request):
title = request.GET.get('title')
education = request.GET.get('education')
dept = request.GET.get('dept')
data = []
# 定义空查询条件
conditions = Q()
if name:
filtered = Teacher.objects.filter(name=name)
for teacher_x in filtered:
data.append(teacher_x.to_dict())
elif sex:
filtered = Teacher.objects.filter(sex=sex)
for teacher_x in filtered:
data.append(teacher_x.to_dict())
elif title:
filtered = Teacher.objects.filter(title=title)
for teacher_x in filtered:
data.append(teacher_x.to_dict())
elif education:
filtered = Teacher.objects.filter(education=education)
for teacher_x in filtered:
data.append(teacher_x.to_dict())
elif dept:
filtered = Teacher.objects.filter(dept=dept)
for teacher_x in filtered:
data.append(teacher_x.to_dict())
else:
all_objects = Teacher.objects.all()
for teacher_x in all_objects:
data.append(teacher_x.to_dict())
return JsonResponse({'code': 200, 'msg': 'success', 'data': data}, safe=False)
conditions &= Q(name=name)
if sex:
conditions &= Q(sex=sex)
if title:
conditions &= Q(title=title)
if education:
conditions &= Q(education=education)
if dept:
conditions &= Q(dept=dept)
# 添加非空查询条件至基本查询集
query = Teacher.objects.filter(conditions)
data = query.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
print(query)
response = ResponseUtil.ok(data, "老师信息查询成功")
return JsonResponse(response)
elif request.method == "DELETE":
parser = MultiPartParser(request.META, BytesIO(request.body), request.upload_handlers, request.encoding)
@ -70,7 +72,7 @@ def teacher(request):
response = {"code": 200, "message": "删除成功!", "data": info}
return JsonResponse(response)
except:
response = {"code": 200, "message": "删除失败,未找到老师信息!"}
response = ResponseUtil.ok("")
return JsonResponse(response)
elif request.method == 'PUT':
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
@ -82,16 +84,11 @@ def teacher(request):
title = put[0]['title']
education = put[0]['education']
dept = put[0]['dept']
Teacher.objects.filter(tid=tid).update(name=name)
Teacher.objects.filter(tid=tid).update(sex=sex)
Teacher.objects.filter(tid=tid).update(title=title)
Teacher.objects.filter(tid=tid).update(education=education)
Teacher.objects.filter(tid=tid).update(dept=dept)
Teacher.objects.filter(tid=tid).update(name=name,sex=sex,title=title)
Teacher.objects.filter(tid=tid).update(education=education,dept=dept)
data = Teacher.objects.filter(tid=tid)[0].to_dict()
return JsonResponse({'code': 200, 'msg': 'success','data':data}, safe=False)
def delete(request):
tid = request.GET.get('tid')
try:
@ -101,25 +98,399 @@ def delete(request):
return JsonResponse({'code': 200, 'msg': '删除失败'}, safe=False)
@csrf_exempt
def teaching_resources(request):
pass
def teaching_resources(request): # 课程查询
if request.method == 'POST':
cid = request.POST.get('cid')
name = request.POST.get('name')
type = request.POST.get('type')
credit = request.POST.get('credit')
tid = request.POST.get('tid')
teacher_name = request.POST.get('t_name')
# 定义空子字典查询条件
conditions = {}
if cid:
conditions.update({'cid': int(cid)}) # 追加信息
if name:
conditions.update({'name': name})
if type:
conditions.update({'type': type})
if credit:
conditions.update({'credit': credit})
if tid:
conditions.update({'tid': int(tid)})
if teacher_name:
conditions.update({'teacher_name': teacher_name})
def check_subdict_exists(dictionary, subdict): # 判断子字典是否存在字典
for key, value in subdict.items():
if key not in dictionary or dictionary[key] != value:
return False
return True
# 获取第一个查询表的数据
table1_result = Teacher.objects.values('tid', 'name', 'title', 'dept')
# 获取第二个查询表的数据
table2_result = Course.objects.values('tid', 'cid', 'name', 'type', 'credit')
# 构建子查询,获取第一个查询表的结果并注入到第二个查询表中
table2_result = table2_result.annotate(teacher_name=Subquery(
table1_result.filter(tid=OuterRef('tid')).values('name')[:1]
), teacher_title=Subquery(
table1_result.filter(tid=OuterRef('tid')).values('title')[:1]
), teacher_dept=Subquery(
table1_result.filter(tid=OuterRef('tid')).values('dept')[:1]
))
# 合并两个查询表的结果
merged_result =list(table2_result)
combined_data = []
print(conditions)
# 输出合并结果
for item in merged_result:
# 判断子字典是否存在于字典中
print(item)
if check_subdict_exists(item, conditions):
combined_data.append(item)
response = ResponseUtil.ok(combined_data, "课程信息查询成功")
return JsonResponse(response)
elif request.method == "GET":
# 获取第一个查询表的数据
table1_result = Teacher.objects.values('tid', 'name', 'title', 'dept')
# 获取第二个查询表的数据
table2_result = Course.objects.values('tid', 'cid', 'name', 'type', 'credit')
# 构建子查询,获取第一个查询表的结果并注入到第二个查询表中
table2_result = table2_result.annotate(teacher_name=Subquery(
table1_result.filter(tid=OuterRef('tid')).values('name')[:1]
), teacher_title=Subquery(
table1_result.filter(tid=OuterRef('tid')).values('title')[:1]
), teacher_dept=Subquery(
table1_result.filter(tid=OuterRef('tid')).values('dept')[:1]
))
data = list(table2_result) # 转换为列表以便序列化为 JSON
response = ResponseUtil.ok(data, "课程信息查询成功")
return JsonResponse(response)
@csrf_exempt
def student_performance_management(request):
if request.method == "POST":
def query_student_information(request): # 学生信息查询
if request.method == 'POST':
name = request.POST.get('name')
sid = request.POST.get('sid')
cid = request.POST.get('cid')
sex = request.POST.get('sex')
grade = request.POST.get('grade')
class_name = request.POST.get('class_name')
major = request.POST.get('major')
# 定义空查询条件
conditions = Q()
if name:
conditions &= Q(name=name)
if sid:
conditions &= Q(sid=int(sid))
if sex:
conditions &= Q(sex=sex)
if grade:
conditions &= Q(grade=grade)
if class_name:
conditions &= Q(class_name=class_name)
if major:
conditions &= Q(major=major)
# 添加非空查询条件至基本查询集
query = Student.objects.filter(conditions)
data = query.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
print(query)
response = ResponseUtil.ok(data, "学生信息查询成功")
return JsonResponse(response)
elif request.method == "GET":
query = Student.objects.all()
data = query.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
response = ResponseUtil.ok(data, "学生信息查询成功")
return JsonResponse(response)
@csrf_exempt
def student_performance_management(request): # 学生成绩管理
if request.method == "POST": # 学生成绩录入
sid = int(request.POST.get('sid'))
cid = int(request.POST.get('cid'))
middle_grade = float(request.POST.get('middle_grade'))
end_grade = float(request.POST.get('end_grade'))
if middle_grade <= 100 and middle_grade >= 0:
if middle_grade <= 100 and middle_grade >= 0 and end_grade <= 100 and end_grade >= 0:
query = SC.objects.filter(sid = sid, cid =cid)
if query.exists(): # 如果学生存在,则修改学生成绩
query.update(middle_grade = middle_grade, end_grade= end_grade)
else: # 如果学生成绩不存在,则插入学生成绩信息
sc = SC()
sid = Student.objects.get(sid=sid)
print(sid)
cid = Course.objects.get(cid=cid)
sc.sid = sid
sc.cid = cid
sc.middle_grade = middle_grade
sc.end_grade=end_grade
sc.save()
return JsonResponse({'code': 200, 'msg': 'success'}, safe=False)
filtered = SC.objects.filter(sid = sid, cid =cid)
data = filtered.values()# 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
response = ResponseUtil.ok(data,"学生成绩录入成功")
return JsonResponse(response)
else:
response = ResponseUtil.error("成绩输入有误")
return JsonResponse(response)
elif request.method == "GET":
cid = request.GET.get('cid')
c_name = request.GET.get('c_name')
sid = request.GET.get('sid')
s_name = request.GET.get('s_name')
data = []
if c_name:
data.append(SC.objects.filter(cid__name=c_name))
elif s_name:
data.append(SC.objects.filter(sid__name=s_name))
elif sid and cid:
data.append(SC.objects.filter(sid=int(sid), cid=int(cid)))
elif sid:
data.append(SC.objects.filter(sid=int(sid)))
elif cid:
data.append(SC.objects.filter(cid=int(cid)))
else:
return JsonResponse({'code': 200, 'msg': '成绩输入有误'}, safe=False)
data.append(SC.objects.all())
response = ResponseUtil.ok(list(data[0].values()), "成绩查询成功")
return JsonResponse(response)
elif request.method == "DELETE":
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
sid = put[0]['sid']
cid = put[0]['cid']
print(sid,cid)
try:
SC.objects.filter(sid=sid, cid=cid).update(middle_grade=0,end_grade=0)
data = SC.objects.filter(sid=sid).values()# 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
response = ResponseUtil.ok(data,"删除成功!")
return JsonResponse(response)
except:
response = ResponseUtil.error("未找到学生成绩")
return JsonResponse(response)
elif request.method == 'PUT':
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
# request.PUT = put[0]
print(put)
sid = put[0]['sid']
cid = put[0]['cid']
middle_grade = put[0]['middle_grade']
end_grade = put[0]['end_grade']
SC.objects.filter(sid=sid, cid=cid).update(middle_grade=middle_grade)
SC.objects.filter(sid=sid, cid=cid).update(end_grade=end_grade)
filtered = SC.objects.filter(sid=sid, cid=cid)
data = filtered.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
response = ResponseUtil.ok(data, "学生成绩修改成功")
return JsonResponse(response)
@csrf_exempt
def course_selection(request): # 选课管理
if request.method == 'POST':
# 假设需要将 tid 为 1 的老师赋值给某个课程的 tid 字段
teacher_id = request.POST.get('tid')
name = request.POST.get('name')
type = request.POST.get('type')
credit = request.POST.get('credit')
if name and type and credit:
try:
teacher_id = int(teacher_id)
course = Course()
course.name = name
course.type = type
course.credit = int(credit)
course.tid = Teacher.objects.get(tid=teacher_id) # 将 Teacher 对象赋给 Course.tid 字段
course.save()
response = ResponseUtil.ok(course.tid_dict(), "课程信息插入成功")
return JsonResponse(response)
except ObjectDoesNotExist:
response = ResponseUtil.error("找不到 id 为 " + str(teacher_id)+" 的老师")
return JsonResponse(response)
except ValueError:
response = ResponseUtil.error("插入数据失败tid_id 列不能为 null")
return JsonResponse(response)
if request.method == 'GET':
cid = request.GET.get('cid')
name = request.GET.get('name')
type = request.GET.get('type')
credit = request.GET.get('credit')
tid = request.GET.get('tid')
# 定义空查询条件
conditions = Q()
if cid:
conditions &= Q(cid=int(cid))
if name:
conditions &= Q(name=name)
if type:
conditions &= Q(type=type)
if credit:
conditions &= Q(credit=credit)
if tid:
tid = int(tid)
conditions &= Q(tid=tid)
# 添加非空查询条件至基本查询集
query = Course.objects.filter(conditions)
data = query.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
print(query)
response = ResponseUtil.ok(data, "课程信息查询成功")
return JsonResponse(response)
if request.method == 'DELETE':
parser = MultiPartParser(request.META, BytesIO(request.body), request.upload_handlers, request.encoding)
posdict = parser.parse()
print(posdict)
cid = int(posdict[0]['cid'])
print(cid)
try:
data = Course.objects.filter(cid=cid).get()
Course.objects.filter(cid=cid).delete()
response = ResponseUtil.ok(data.tid_dict, "删除课程成功!")
return JsonResponse(response)
except:
response = ResponseUtil.ok("未查询到课程,删除失败")
return JsonResponse(response)
if request.method == 'PUT':
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
# request.PUT = put[0]
print(put)
cid = put[0]['cid']
name = put[0]['name']
type = put[0]['type']
credit = put[0]['credit']
tid = put[0]['tid']
if cid and name and type and credit and tid:
Course.objects.filter(cid=cid).update(name=name, type=type, credit=credit)
Course.objects.filter(cid=cid).update(tid=Teacher.objects.get(tid=tid))
data = Course.objects.filter(cid=cid)[0].tid_dict()
response = ResponseUtil.ok(data, "课程信息修改成功")
return JsonResponse(response)
else:
response = ResponseUtil.error("课程信息修改失败,信息不全")
return JsonResponse(response)
@csrf_exempt
def student_management(request):
if request.method == 'GET':
tid = int(request.GET.get('tid'))
# 获取第1个查询表的数据
table1_result = Course.objects.filter(tid__tid=tid)
cids = [item.cid for item in table1_result]
# 获取第二个查询表的数据
table2_result = SC.objects.filter(cid__in=cids)
# for item in table2_result:
# print(item.sid.sid)
# 获取第三个查询表的数据
# 提取查询结果中的 sid 值
sids = [item.sid.sid for item in table2_result]
table3_result = Student.objects.filter(sid__in=sids).values('sid', 'name', 'sex', 'grade', 'class_name', 'major')
table = list(table3_result)
response = ResponseUtil.ok(table,"选课学生信息")
return JsonResponse(response)
if request.method == 'POST':
cid = request.POST.get('cid')
tid = request.POST.get('tid')
grade = request.POST.get('grade')
class_name = request.POST.get('class_name')
major = request.POST.get('major')
# 定义空查询条件
data = []
if cid:
cid = int(cid)
data.append(SC.objects.filter(cid=cid))
else:
# 获取第1个查询表的数据
tid = int(tid)
table1_result = Course.objects.filter(tid__tid=tid)
cids = [item.cid for item in table1_result]
# 获取第二个查询表的数据
data.append(SC.objects.filter(cid__in=cids))
# for item in table2_result:
# print(item.sid.sid)
# 获取第三个查询表的数据
# 提取查询结果中的 sid 值
print(data)
sids = [item.sid.sid for item in data[0]]
conditions = Q(sid__in=sids)
if grade:
conditions &= Q(grade=grade)
if class_name:
class_name &= Q(class_name=class_name)
if major:
conditions &= Q(major=major)
table3_result = Student.objects.filter(conditions).values('sid', 'name', 'sex', 'grade', 'class_name',
'major')
table = list(table3_result)
response = ResponseUtil.ok(table, "选课学生查询成功")
return JsonResponse(response)
if request.method == 'DELETE':
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
sid = put[0]['sid']
cid = put[0]['cid']
print(sid)
try:
info = SC.objects.filter(sid=sid)
data = info.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
print(info)
SC.objects.filter(sid=sid,cid=cid).delete()
response = ResponseUtil.ok(data, "学生选课删除成功!")
return JsonResponse(response)
except:
response = ResponseUtil.error("未找到学生成绩")
return JsonResponse(response)
@csrf_exempt
def SC_selection(request):
if request.method == 'GET':
cid = int(request.GET.get('cid'))
table2_result = SC.objects.filter(cid__in=cid)
# for item in table2_result:
# print(item.sid.sid)
# 获取第三个查询表的数据
# 提取查询结果中的 sid 值
sids = [item.sid.sid for item in table2_result]
table3_result = Student.objects.filter(sid__in=sids).values('sid', 'name', 'sex', 'grade', 'class_name',
'major')
table = list(table3_result)
response = ResponseUtil.ok(table, "选课学生信息")
return JsonResponse(response)
if request.method == 'POST':
cid = request.POST.get('cid')
grade = request.POST.get('grade')
class_name = request.POST.get('class_name')
major = request.POST.get('major')
# 定义空查询条件
data = []
data.append(SC.objects.filter(cid=int(cid)))
# 获取第三个查询表的数据
# 提取查询结果中的 sid 值
print(data)
sids = [item.sid.sid for item in data[0]]
conditions = Q(sid__in=sids)
if grade:
conditions &= Q(grade=grade)
if class_name:
class_name &= Q(class_name=class_name)
if major:
conditions &= Q(major=major)
table3_result = Student.objects.filter(conditions).values('sid', 'name', 'sex', 'grade', 'class_name',
'major')
table = list(table3_result)
response = ResponseUtil.ok(table, "选课学生查询成功")
return JsonResponse(response)
if request.method == 'DELETE':
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
sid = put[0]['sid']
cid = put[0]['cid']
print(sid)
try:
info = SC.objects.filter(sid=sid)
data = info.values() # 将 QuerySet 对象转换为字典列表
data = list(data) # 转换为列表以便序列化为 JSON
print(info)
SC.objects.filter(sid=sid, cid=cid).delete()
response = ResponseUtil.ok(data, "学生选课删除成功!")
return JsonResponse(response)
except:
response = ResponseUtil.error("未找到学生成绩")
return JsonResponse(response)
Loading…
Cancel
Save