You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

244 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from django.shortcuts import render
# Create your views here.
from django.http import HttpRequest
from django.http import JsonResponse
from EduSystemServer.utils import ResponseUtil
from .models import Student
from teacher.models import Teacher
from course.models import SC, Course
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):
if request.method == "POST":
try:
request_data = json.loads(request.body)
print(request_data)
student = Student.objects.filter(sid=request_data.get("sid")).first()
student.username = request_data.get("username")
student.password = request_data.get("password")
student.name = request_data.get("name")
student.sex = request_data.get("sex")
student.grade = request_data.get("grade")
student.class_name = request_data.get("class_name")
student.major = request_data.get("major")
student.save()
response = ResponseUtil.ok(student.to_dict(), "添加成功!")
return JsonResponse(response)
except Exception as E:
return JsonResponse(ResponseUtil.error(E))
elif request.method == "GET":
sid = request.GET.get('sid')
name = request.GET.get('name')
sex = request.GET.get('sex')
grade = request.GET.get('grade')
class_name = request.GET.get('class_name')
major = request.GET.get('major')
data = []
if sid:
filtered = Student.objects.filter(sid=sid)
for student in filtered:
data.append(student.to_dict())
elif name:
filtered = Student.objects.filter(name=name)
for student in filtered:
data.append(student.to_dict())
elif sex:
filtered = Student.objects.filter(sex=sex)
for student in filtered:
data.append(student.to_dict())
elif grade:
filtered = Student.objects.filter(grade=grade)
for student in filtered:
data.append(student.to_dict())
elif class_name:
filtered = Student.objects.filter(class_name=class_name)
for student in filtered:
data.append(student.to_dict())
elif major:
filtered = Student.objects.filter(major=major)
for student in filtered:
data.append(student.to_dict())
else:
all_objects = Student.objects.all()
for student in all_objects:
data.append(student.to_dict())
response = ResponseUtil.ok(data, "查询成功!")
return JsonResponse(response)
elif request.method == "DELETE":
parser = MultiPartParser(request.META, BytesIO(request.body), request.upload_handlers, request.encoding)
post_dict = parser.parse()
sid = post_dict[0]['sid']
try:
info = Student.objects.filter(sid=sid).get().to_dict()
Student.objects.filter(sid=sid).delete()
response = ResponseUtil.ok(info, "删除成功!")
return JsonResponse(response)
except:
return JsonResponse(ResponseUtil.error("删除失败,未找到学生信息!"))
elif request.method == "PUT":
put = MultiPartParser(request.META, request, request.upload_handlers, request.encoding).parse()
sid = put[0]['sid']
username = put[0]['username']
name = put[0]['name']
sex = put[0]['sex']
grade = put[0]['grade']
class_name = put[0]['class_name']
major = put[0]['major']
if Student.objects.filter(sid=sid):
Student.objects.filter(sid=sid).update(username=username, name=name, sex=sex, grade=grade,
class_name=class_name,
major=major)
else:
return JsonResponse(ResponseUtil.error("没有查询到该同学!"))
data = Student.objects.filter(sid=sid)[0].to_dict()
return JsonResponse(ResponseUtil.ok(data, "修改成功!"))
# 查询成绩
def search_grade(request): # 获取SID返回该同学的所有成绩
if request.method == "GET":
sid = request.GET.get('sid')
cid = SC.objects.filter(sid_id=sid).values()
data_list = []
for i in range(len(cid)):
c_name = Course.objects.filter(cid=cid[i]['cid_id']).values('name')[0]['name']
middle_grade = cid[i]['middle_grade']
end_grade = cid[i]['end_grade']
data = {
'c_name': c_name,
'平时成绩': middle_grade,
'最终成绩': end_grade
}
data_list.append(data)
return JsonResponse(ResponseUtil.ok(data_list, "成绩查询成功!"))
# 修改信息
@csrf_exempt
def change_info(request):
if request.method == "GET":
sid = request.GET.get('sid')
info = Student.objects.filter(sid=sid).values()
data = {
'学生编号': sid,
'用户账号': info[0]['username'],
'用户密码': info[0]['password'],
'姓名': info[0]['name'],
'性别': info[0]['sex'],
'年级': info[0]['grade'],
'班级': info[0]['class_name'],
'专业': info[0]['major'],
}
return JsonResponse(ResponseUtil.ok(data, "个人信息查询成功!"))
elif request.method == "POST":
sid = request.GET.get('sid')
stu_info = Student.objects.get(sid=sid)
username = request.POST.get('username') or stu_info.username
password = request.POST.get('password') or stu_info.password
name = request.POST.get('name') or stu_info.name
sex = request.POST.get('sex') or stu_info.sex
grade = request.POST.get('grade') or stu_info.grade
class_name = request.POST.get('class_name') or stu_info.class_name
major = request.POST.get('major') or stu_info.major
Student.objects.filter(sid=sid).update(username=username, password=password, name=name, sex=sex, grade=grade,
class_name=class_name, major=major)
data = {
'学生编号': sid,
'用户账号': username,
'用户密码': password,
'姓名': name,
'性别': sex,
'年级': grade,
'班级': class_name,
'专业': major,
}
return JsonResponse(ResponseUtil.ok(data, "学生信息修改成功!"))
# 选课
@csrf_exempt
def choose_course(request):
if request.method == "GET": # 将所有课程信息返回
course_list = []
course = Course.objects.all().values()
for i in range(len(course)):
teacher = Teacher.objects.filter(tid=course[i]['tid_id']).values('name')
data = {
'课程编号': course[i]['cid'],
'课程名称': course[i]['name'],
'课程类型': course[i]['type'],
'课程学分': course[i]['credit'],
'教师': teacher[0]['name'],
}
course_list.append(data)
return JsonResponse(ResponseUtil.ok(course_list, "课程查询成功!"))
elif request.method == "POST": # 将选择的课程添加到选课表
sid = request.GET.get('sid')
cid = request.POST.get('cid_id')
try:
SC.objects.create(sid_id=sid, cid_id=cid)
course = Course.objects.filter(cid=cid).values()
teacher = Teacher.objects.filter(tid=course[0]['tid_id']).values('name')
data = {
'课程编号': cid,
'课程名称': course[0]['name'],
'课程类型': course[0]['type'],
'课程学分': course[0]['credit'],
'教师': teacher[0]['name'],
}
return JsonResponse(ResponseUtil.ok(data, "选课成功!"))
except:
return JsonResponse(ResponseUtil.error("选课失败!"))
# 退课
@csrf_exempt
def delete_course(request):
if request.method == "GET": # 返回用户所有选择的课程
sid = request.GET.get('sid')
course_list = []
try:
cid = SC.objects.filter(sid_id=sid).values('cid_id') # 通过选课表找到学生选的所有课程
for i in range(len(cid)):
course = Course.objects.filter(cid=cid[i]['cid_id']).values() # 在课程表中找课程详细信息
teacher = Teacher.objects.filter(tid=course[0]['tid_id']).values('name')
data = {
'课程编号': course[0]['cid'],
'课程名称': course[0]['name'],
'课程类型': course[0]['type'],
'课程学分': course[0]['credit'],
'教师': teacher[0]['name'],
}
course_list.append(data)
return JsonResponse(ResponseUtil.ok(course_list, "课程查询成功!"))
except:
return JsonResponse(ResponseUtil.error('你还没有选课!'))
elif request.method == "POST": # 将用户选择的课程删除
sid = request.GET.get('sid')
cid = request.POST.get('cid')
try:
course = Course.objects.filter(cid=cid).values() # 在课程表中找课程详细信息
teacher = Teacher.objects.filter(tid=course[0]['tid_id']).values('name')
data = {
'课程编号': course[0]['cid'],
'课程名称': course[0]['name'],
'课程类型': course[0]['type'],
'课程学分': course[0]['credit'],
'教师': teacher[0]['name'],
}
SC.objects.filter(sid_id=sid, cid_id=cid).delete()
return JsonResponse(ResponseUtil.ok(data, "退课成功!"))
except:
JsonResponse(ResponseUtil.error('退课失败!'))
def get_select_course_by_id(request):
pass