diff --git a/EduSystemServer/API/views.py b/EduSystemServer/API/views.py index 1ef3a82..28127b1 100644 --- a/EduSystemServer/API/views.py +++ b/EduSystemServer/API/views.py @@ -12,9 +12,9 @@ from EduSystemServer.utils import ResponseUtil @csrf_exempt def login(request): - username = json.loads(request.body).get("username") - password = json.loads(request.body).get("password") - _type = json.loads(request.body).get("type") + username = request.POST.get("username") + password = request.POST.get("password") + _type = request.POST.get("type") if _type == "student": student = Student.objects.filter(username=username, password=password).first() @@ -35,7 +35,8 @@ def login(request): result = ResponseUtil.error("username or password error!") else: result = ResponseUtil.error("type error!") - return JsonResponse(result) + response = JsonResponse(result) + return response @csrf_exempt def get_user_info(request): diff --git a/EduSystemServer/EduSystemServer/settings.py b/EduSystemServer/EduSystemServer/settings.py index 8d79069..5f95221 100644 --- a/EduSystemServer/EduSystemServer/settings.py +++ b/EduSystemServer/EduSystemServer/settings.py @@ -13,11 +13,6 @@ https://docs.djangoproject.com/en/2.2/ref/settings/ import os -CORS_ALLOW_ORIGIN_WHITELIST = [ - "http://localhost:8080", # 允许访问的来源 - "http://localhost:8000", # 允许访问的来源 - # 可以继续添加其他允许的来源 -] # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -36,6 +31,8 @@ DEBUG = True ALLOWED_HOSTS = ["*"] + + # Application definition INSTALLED_APPS = [ 'django.contrib.admin', @@ -65,21 +62,6 @@ MIDDLEWARE = [ # 'API.middle.AuthMiddleware', ] -CORS_ALLOW_CREDENTIALS = True -CORS_ORIGIN_ALLOW_ALL = True -CORS_ALLOW_HEADERS = ( - 'XMLHttpRequest', - 'X_FILENAME', - 'accept-encoding', - 'authorization', - 'content-type', - 'dnt', - 'origin', - 'user-agent', - 'x-csrftoken', - 'x-requested-with', - 'Pragma', -) ROOT_URLCONF = 'EduSystemServer.urls' @@ -154,3 +136,18 @@ USE_TZ = False # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/' + +CORS_ALLOW_CREDENTIALS = True +CORS_ORIGIN_ALLOW_ALL = True + +CORS_ALLOW_HEADERS = ( + 'accept', + 'accept-encoding', + 'authorization', + 'content-type', + 'dnt', + 'origin', + 'user-agent', + 'x-requested-with', + 'Cookie', # 添加Cookie到允许的头部 +) diff --git a/EduSystemServer/EduSystemServer/utils.py b/EduSystemServer/EduSystemServer/utils.py index eba0b59..625de0b 100644 --- a/EduSystemServer/EduSystemServer/utils.py +++ b/EduSystemServer/EduSystemServer/utils.py @@ -7,4 +7,4 @@ class ResponseUtil: @staticmethod def error(message="error!"): - return {"code": -1, "message": message} \ No newline at end of file + return {"code": -1, "message": str(message)} \ No newline at end of file diff --git a/EduSystemServer/Student/urls.py b/EduSystemServer/Student/urls.py index 58b6ee9..a2ba917 100644 --- a/EduSystemServer/Student/urls.py +++ b/EduSystemServer/Student/urls.py @@ -5,7 +5,8 @@ from .views import * urlpatterns = [ path("", studnets), path("search", search_student), - path("selectCourse", get_select_course_by_id), + path("selectCourse", select_course), path("add", add_student), - path("delete", del_student) + path("delete", del_student), + path("getGrade", get_grade), ] \ No newline at end of file diff --git a/EduSystemServer/Student/views.py b/EduSystemServer/Student/views.py index 332982d..3c3d2c1 100644 --- a/EduSystemServer/Student/views.py +++ b/EduSystemServer/Student/views.py @@ -5,6 +5,8 @@ from django.shortcuts import render # Create your views here. from django.http import JsonResponse + +from course.models import SC, Course from .models import Student from EduSystemServer.utils import ResponseUtil @@ -21,8 +23,7 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def studnets(request): if request.method == "POST": try: - request_data = json.loads(request.body) - print(request_data) + request_data = request.POST student = Student.objects.filter(sid=request_data.get("sid")).first() student.username = request_data.get("username") student.password = request_data.get("password") @@ -123,7 +124,7 @@ def add_student(request): if not request.method == "POST": return JsonResponse(ResponseUtil.error("request method error!")) try: - request_data = json.loads(request.body) + request_data = request.POST student = Student() student.username = request_data.get("username") student.password = request_data.get("password") @@ -181,5 +182,40 @@ def del_student(request): return JsonResponse(result) -def get_select_course_by_id(request): - pass +@csrf_exempt +def select_course(request): + if not request.method == "POST": + return JsonResponse(ResponseUtil.error("request method error!")) + try: + request_data = request.POST + cid = request_data.get("cid") + username = request_data.get("username") + student = Student.objects.filter(username=username).first() + if SC.objects.filter(cid=cid, sid=student.sid).exists(): + return JsonResponse(ResponseUtil.error("该课程已经选择!")) + sc = SC() + sc.sid = student + sc.cid = Course.objects.filter(cid=cid).first() + sc.middle_grade = 0 + sc.end_grade = 0 + sc.save() + return JsonResponse(ResponseUtil.ok(None, "选课成功!")) + except Exception as E: + print(E) + return JsonResponse(ResponseUtil.error(str(E))) + + +def get_grade(request): + if not request.method == "GET": + return ResponseUtil.error("request method error!") + try: + username = request.GET.get("username") + student = Student.objects.filter(username=username).first() + grade__all = SC.objects.filter(sid=student.sid).values("sid", "sid__name", "cid__name", "cid__type", "cid__credit", + "cid__tid__name", "middle_grade", "end_grade").all() + grades = [] + for grade in grade__all: + grades.append(grade) + return JsonResponse(ResponseUtil.ok(grades)) + except Exception as E: + return JsonResponse(ResponseUtil.error(E)) diff --git a/EduSystemServer/course/urls.py b/EduSystemServer/course/urls.py index 74f5f91..8090b87 100644 --- a/EduSystemServer/course/urls.py +++ b/EduSystemServer/course/urls.py @@ -4,4 +4,7 @@ from course.views import * urlpatterns = [ path("", courses), + path("getCourseById", get_course_by_student_id), + path("deleteSelectCourse", delete_select_course), + path("seacherCourse", search_course) ] \ No newline at end of file diff --git a/EduSystemServer/course/views.py b/EduSystemServer/course/views.py index e72d5c1..c189e05 100644 --- a/EduSystemServer/course/views.py +++ b/EduSystemServer/course/views.py @@ -1,11 +1,17 @@ +import json + +from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.shortcuts import render # Create your views here. from django.http import JsonResponse + +from EduSystemServer.utils import ResponseUtil from course.models import * from django.views.decorators.csrf import csrf_exempt from io import BytesIO from django.http.multipartparser import MultiPartParser +from django.core import serializers @csrf_exempt @@ -20,32 +26,29 @@ def courses(request): response = {"code": 200, "message": "添加成功!", "data": course.to_dict()} return JsonResponse(response) elif request.method == "GET": - cid = request.GET.get('cid') - c_name = request.GET.get('c_name') - c_type = request.GET.get('type') - tid = request.GET.get('tid') - data = [] - if cid: - filtered = Course.objects.filter(cid=cid) - for item in filtered: - data.append(item.to_dict()) - elif c_name: - filtered = Course.objects.filter(c_name=c_name) - for item in filtered: - data.append(item.to_dict()) - elif c_type: - filtered = Course.objects.filter(type=c_type) - for item in filtered: - data.append(item.to_dict()) - elif tid: - filtered = Course.objects.filter(tid=tid) - for item in filtered: - data.append(item.to_dict()) - else: - all_objects = Course.objects.all() - for item in all_objects: - data.append(item.to_dict()) - return JsonResponse({'code': 200, 'msg': 'success', 'data': data}, safe=False) + teacher_name = request.GET.get("tName") + course_name = request.GET.get("cName") + course_type = request.GET.get("cType") + current_page = request.GET.get("currentPage") + if not teacher_name == "" or not teacher_name is None: + filter_course = Course.objects.filter(tid__name__contains=teacher_name) + if not course_name == "" or not course_name is None: + filter_course = Course.objects.filter(tid__course__name=course_name) + if not course_type == "" or not course_type is None: + filter_course = Course.objects.filter(tid__course__type=course_type) + filter_course = filter_course.values("tid__course__name", "tid__name", "tid__course__type", "tid__course__credit", + "tid__title", "tid__education", "tid__dept", "cid").all() + paginator = Paginator(filter_course, 10) + try: + courses = paginator.page(current_page).object_list + except PageNotAnInteger: + courses = paginator.page(1) + except EmptyPage: + courses = paginator.page(paginator.num_pages).object_list + result = ResponseUtil.ok(json.loads(serializers.serialize("json", courses)), "success!") + result["pageTotal"] = paginator.count + result["pageNum"] = paginator.num_pages + return JsonResponse(result) elif request.method == "DELETE": delete = MultiPartParser(request.META, BytesIO(request.body), request.upload_handlers, request.encoding).parse() cid = delete[0]['cid'] @@ -67,3 +70,64 @@ def courses(request): Course.objects.filter(cid=cid).update(c_name=c_name, type=c_type, credit=credit, tid=tid) data = Course.objects.filter(cid=cid)[0].to_dict() return JsonResponse({'code': 200, 'msg': 'success', 'data': data}, safe=False) + + +def search_course(request): + if not request.method == "GET": + return JsonResponse(ResponseUtil.error("request method error!")) + teacher_name = request.GET.get("tName") + course_name = request.GET.get("cName") + course_type = request.GET.get("cType") + current_page = request.GET.get("currentPage") + filter_course = Course.objects + if not teacher_name == "" and teacher_name is not None: + filter_course = Course.objects.filter(tid__name__contains=teacher_name) + if not course_name == "" and course_name is not None: + filter_course = Course.objects.filter(tid__course__name__contains=course_name) + if not course_type == "" and course_type is not None: + filter_course = Course.objects.filter(tid__course__type__contains=course_type) + filter_course = filter_course.values("tid__course__name", "tid__name", "tid__course__type", "tid__course__credit", + "tid__title", "tid__education", "tid__dept", "cid").all() + paginator = Paginator(filter_course, 10) + try: + courses = paginator.page(current_page).object_list + except PageNotAnInteger: + courses = paginator.page(1).object_list + except EmptyPage: + courses = paginator.page(paginator.num_pages).object_list + courses_data = [] + for course in courses: + courses_data.append(course) + result = ResponseUtil.ok(courses_data, "success!") + result["pageTotal"] = paginator.count + result["pageNum"] = paginator.num_pages + return JsonResponse(result) + + +def get_course_by_student_id(request): + if not request.method == "GET": + return JsonResponse(ResponseUtil.error("request method error!")) + s_username = request.GET.get("username") + student = Student.objects.filter(username=s_username).first() + sc_list = SC.objects.filter(sid=student.sid).values("sid__name", "cid__name", "cid__tid__name", "sid", "cid", + "cid__credit", "cid__tid__title", "cid__tid__dept", "cid__type").all() + data = [] + for sc in sc_list: + data.append(sc) + result = ResponseUtil.ok(data) + return JsonResponse(result) + + +def delete_select_course(request): + if not request.method == "GET": + return JsonResponse(ResponseUtil.error("request method error!")) + try: + sid = request.GET.get("sid") + cid = request.GET.get("cid") + sc = SC.objects.filter(cid=cid, sid=sid).first() + sc.delete() + return JsonResponse(ResponseUtil.ok(None, "退出选课成功!")) + except Exception as E: + return JsonResponse(ResponseUtil.error(E)) + +