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)