Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
197f2e2
更新学生端API接口
misttree May 29, 2019
95efdbd
更新学生端API接口
misttree May 29, 2019
4f2f6c9
添加用户提交实验报告的接口API
misttree May 30, 2019
a30d91d
添加URL
May 31, 2019
f565bfc
更新学生登陆API
misttree May 31, 2019
7fcb2ab
合并主分支,添加更新
misttree May 31, 2019
bb1564f
更新学生端API
misttree Jun 2, 2019
fabeedd
update master
misttree Jun 3, 2019
cf6d543
update student get course
NestDream Jun 3, 2019
3caf6b9
更新学生端API存在的bug
misttree Jun 3, 2019
0beba3c
更新学生端API,查询全部课程
misttree Jun 3, 2019
2d8e982
学生端API测试成功:提交记录
misttree Jun 4, 2019
a7bf06f
更新学生端API:获取全部课程
misttree Jun 4, 2019
ce06523
更新课程API:获取全部消息与获取课程消息
misttree Jun 4, 2019
db320e9
更新学生端API:查看题目详情,查看测试用例
misttree Jun 4, 2019
64503b5
学生端API更新:添加问题提交API
misttree Jun 4, 2019
6ec4bbd
使用云数据库存储
NestDream Jun 4, 2019
d620f73
添加接口
NestDream Jun 4, 2019
7745b7c
添加根据student_number找课程和根据student的user id找课程
NestDream Jun 4, 2019
ac5e405
Merge branch 'zhb/student_apis' of github.com:nkucs/server into zhb/s…
NestDream Jun 4, 2019
a5292d0
修改为本地数据库,可通过运行sql文件建立数据库
misttree Jun 4, 2019
5d84ffa
merge master branch
misttree Jun 4, 2019
b4578c8
更新学生端API:传递提交结果
misttree Jun 4, 2019
1f3e4fa
更新学生端API:添加创建时间
misttree Jun 4, 2019
53eb158
更新API:获取用户的全部提交记录
misttree Jun 4, 2019
bae504b
学生端API更新:添加题目提交结果查询
misttree Jun 4, 2019
07053ec
更新学生端API:获取学生信息
misttree Jun 5, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions course/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from rest_framework import serializers
from .models import Course
from user.models import Student

class CourseSerializers(serializers.ModelSerializer):
class Meta:
model = Course
fields = '__all__'
6 changes: 6 additions & 0 deletions course/urls/student.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
from django.conf.urls import url
from course.views.student import GetAllCourseAPI,GetAllMessageAPI,GetMessageOfCourseAPI,GetMyCourseAPI,GetMyCourseByIDAPI

urlpatterns = [
url(r'get-all-course/?$', GetAllCourseAPI.as_view(), name="get-all-course"),
url(r'get-all-message/?$', GetAllMessageAPI.as_view(), name="get-all-message"),
url(r'get-course-message/?$', GetMessageOfCourseAPI.as_view(), name="get-course-message"),
url(r'get-my-course/?$',GetMyCourseAPI.as_view(),name="get-my-course"),
url(r'get-my-course-by-id/?$',GetMyCourseByIDAPI.as_view(),name="get-my-course-by-id")
]
80 changes: 79 additions & 1 deletion course/views/student.py
Original file line number Diff line number Diff line change
@@ -1 +1,79 @@
from utils.api import APIView
from utils.api import APIView
from course.models import Course, Message
from course.serializers import CourseSerializers
from utils.api import JSONResponse
from django.forms import model_to_dict


class GetAllCourseAPI(APIView):
#OK#
def get(self, request):
AllCourse = Course.objects.all()
AllCourseResult = []
for item in AllCourse:
item_result = model_to_dict(item)
del item_result['students']
del item_result['teachers']
AllCourseResult.append(item_result)
return self.success(AllCourseResult)


class GetAllMessageAPI(APIView):
#OK#
def get(self, request):
AllMessage = Message.objects.all()
AllMessageResult = []
for item in AllMessage:
item_result = model_to_dict(item)
AllMessageResult.append(item_result)
return self.success(AllMessageResult)


class GetMessageOfCourseAPI(APIView):
#OK#
def get(self, request):
course_id = int(request.GET.get('course_id'))
AllMessage = Message.objects.filter(course=course_id)
AllMessageResult = []
for item in AllMessage:
item_result = model_to_dict(item)
AllMessageResult.append(item_result)
return self.success(AllMessageResult)


class GetMyCourseAPI(APIView):
# 根据student_number找到他的所有课程
def get(self, request):
studentNumber = request.GET.get('studentNumber')
AllCourse = Course.objects.all()
MyCourses = []
for item in AllCourse:
item_result = model_to_dict(item)
for student in item_result['students']:
print(student.student_number)
stu_num=""+student.student_number
if stu_num == studentNumber:
del item_result['students']
del item_result['teachers']
MyCourses.append(item_result)
break

return self.success(MyCourses)

class GetMyCourseByIDAPI(APIView):
# 根据student的user id找到他的所有课程
def get(self, request):
studentID = request.GET.get('studentID')
AllCourse = Course.objects.all()
MyCourses = []
for item in AllCourse:
item_result = model_to_dict(item)
for student in item_result['students']:
stu_id=str(student.user.id)
if stu_id == studentID:
del item_result['students']
del item_result['teachers']
MyCourses.append(item_result)
break

return self.success(MyCourses)
4 changes: 2 additions & 2 deletions oj/dev_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'ENGINE': 'django.db.backends.mysql',
'HOST': os.getenv("DB_HOST", "127.0.0.1"),
'PORT': os.getenv("DB_PORT", 3306),
'USER': os.getenv("DB_USER", "root"),
'PASSWORD': os.getenv("DB_USER", "root"),
'NAME': os.getenv("DB_NAME", "oj"),
}
}
}
9 changes: 6 additions & 3 deletions oj/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,20 @@
url(r"^exam/student", include("exam.urls.admin")),
url(r"^exam/examlist", include("exam.urls.admin")),
url(r"^teacher/course/", include("course.urls.admin")),
url(r"^api/student/lab/", include("lab.urls.student")),
url(r"^api/student/course/", include("course.urls.student")),
url(r"^teacher/course/stat/", include("course.urls.statistics")),
url(r"^teacher/submission/stat/", include("submission.urls.statistics")),
url(r"^teacher/student/stat/", include("user.urls.statistics")),
url(r"^api/student/submission", include("submission.urls.student")),
url(r"^api/student/problem", include("problem.urls.student")),
url(r"^api/student/user", include("user.urls.student")),
url(r"^statistic/course/", include("course.urls.statistics")),
url(r"^api/student/", include("lab.urls.student")),
url(r"^student/lab/", include("lab.urls.student")),
url(r"^auth/", include("user.urls.auth")),
url(r"^swagger$", schema_view),
url(r"^teacher/problem/", include("problem.urls.admin")),
url(r"^administrator/student/", include("user.urls.student")),
url(r"^teacher/submission/statistics/",
include("submission.urls.statistics")),
url(r"^teacher/submission/statistics/",include("submission.urls.statistics")),
url(r"^distribution/", include("submission.urls.statistics")),
]
3 changes: 3 additions & 0 deletions problem/urls/student.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from django.conf.urls import url
from problem.views.student import GetProblemAPI,GetCaseOfProblemAPI

urlpatterns = [
url(r"get-problem/?$", GetProblemAPI.as_view(), name="get-problem"),
url(r"get-problem-cases/?$", GetCaseOfProblemAPI.as_view(), name="get-problem-cases"),
]
27 changes: 26 additions & 1 deletion problem/views/student.py
Original file line number Diff line number Diff line change
@@ -1 +1,26 @@
from utils.api import APIView
from utils.api import APIView, JSONResponse
from rest_framework import status
from django.http import HttpResponse, JsonResponse
from ..models import Problem, Case
from django.forms import model_to_dict

class GetProblemAPI(APIView):
def get(self, request):
# get information from frontend #ok#
id_problem = int(request.GET.get('id_problem'))
problem_return = model_to_dict(Problem.objects.get(id=id_problem))
del problem_return['tags']
return self.success(problem_return)


class GetCaseOfProblemAPI(APIView):
def get(self, request):
# get information from frontend #ok#
id_problem = int(request.GET.get('id_problem'))
case_list = Case.objects.filter(problem=id_problem)
case_list_result = []
for item in case_list:
item_result = model_to_dict(item)
del item_result['tags']
case_list_result.append(item_result)
return self.success(case_list_result)
3 changes: 1 addition & 2 deletions submission/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ class ProblemSubmission(models.Model):
IP = models.CharField(max_length=20)
language = models.IntegerField()
submission_status = models.ForeignKey(CaseStatus, default=CaseStatus.default, on_delete=models.SET_DEFAULT)
cases = models.ManyToManyField(Case, blank=True, related_name='problem_submissions',
through='ProblemSubmissionCase')
cases = models.ManyToManyField(Case, blank=True, related_name='problem_submissions',through='ProblemSubmissionCase')
lectures = models.ManyToManyField(Lecture, blank=True, related_name='problem_submissions')


Expand Down
10 changes: 10 additions & 0 deletions submission/urls/student.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
from django.conf.urls import url
from ..views.student import GetAllStudentSubmissionAPI
from ..views.student import GetUserSubmissionAPI
from ..views.student import AddLabAttachmentAPI
from ..views.student import CreateProblemSubmissionAPI
from ..views.student import GetProblemSubmissionAPI

urlpatterns = [
url(r"get_all_submission/?$", GetAllStudentSubmissionAPI.as_view(), name="get_all_submission"),
url(r"get_user_submission/?$", GetUserSubmissionAPI.as_view(), name="get_user_submission"),
url(r"get_problem_submission/?$", GetProblemSubmissionAPI.as_view(), name="get_problem_submission"),
url(r"add_ab_attachment/?$", AddLabAttachmentAPI.as_view(), name="add_ab_attachment"),
url(r"add_problem_submission/?$", CreateProblemSubmissionAPI.as_view(), name="add_problem_submission"),
]
115 changes: 114 additions & 1 deletion submission/views/student.py
Original file line number Diff line number Diff line change
@@ -1 +1,114 @@
from utils.api import APIView
from utils.api import APIView
from rest_framework import status
from ..serializers import ProblemSubmissionSerializers1
from django.http import HttpResponse, JsonResponse
from submission.models import ProblemSubmission, CaseStatus
from lab.models import LabSubmission,Attachment
from django.forms import model_to_dict
import time;

class GetProblemSubmissionAPI(APIView): # 获取一个学生的所有提交记录 #OK#
def get(self, request):
submission_problem_id = int(request.GET.get('problem_id'))
problem_submission = ProblemSubmission.objects.filter(problem=submission_problem_id)
caseStatusResult = CaseStatus.objects.all()
caseStatusDemo = []
for item in caseStatusResult:
caseStatusDemo.append(model_to_dict(item))

problem_submission_result = []
for item in problem_submission:
item_result = model_to_dict(item)
del item_result['cases']
item_result['create_at'] = str(item.created_at)
item_result['status'] = caseStatusDemo[int(item_result['submission_status'])]['name']
problem_submission_result.append(item_result)
return self.success(problem_submission_result)

class GetAllStudentSubmissionAPI(APIView): # 获取一个学生的所有提交记录 #OK#
def get(self, request):
submission_student_id = int(request.GET.get('student_id'))
student_submission = ProblemSubmission.objects.filter(student=submission_student_id)
caseStatusResult = CaseStatus.objects.all()
caseStatusDemo = []
for item in caseStatusResult:
caseStatusDemo.append(model_to_dict(item))

student_submission_result = []
for item in student_submission:
item_result = model_to_dict(item)
del item_result['cases']
item_result['create_at'] = str(item.created_at)
item_result['status'] = caseStatusDemo[int(item_result['submission_status'])]['name']
student_submission_result.append(item_result)
return self.success(student_submission_result)

class GetUserSubmissionAPI(APIView): # 获取一个学生关于一道题目的提交记录
def get(self, request):
submission_student_id = int(request.GET.get('student_id'))
submission_problem_id = int(request.GET.get('problem_id'))
# query from database for submissions of student and problem
caseStatusResult = CaseStatus.objects.all()
caseStatusDemo = []
for item in caseStatusResult:
caseStatusDemo.append(model_to_dict(item))

userPersonalSubmission = ProblemSubmission.objects.filter(student=submission_student_id, problem=submission_problem_id)
userPersonalSubmissionResult = []
for item in userPersonalSubmission:
item_result = model_to_dict(item)
del item_result['cases']
item_result['create_at'] = str(item.created_at)
item_result['status'] = caseStatusDemo[int(item_result['submission_status'])]['name']
userPersonalSubmissionResult.append(item_result)
return self.success(userPersonalSubmissionResult)


class CreateProblemSubmissionAPI(APIView): # 获取一个学生关于一道题目的提交记录
def post(self, request):
submission_student_id = int(request.GET.get('student_id'))
submission_problem_id = int(request.GET.get('problem_id'))
submission_program = str(request.GET.get('program'))
submission_create_at= time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
submission_runtime = int(request.GET.get('runtime'))
submission_memory = int(request.GET.get('memory'))
submission_ip = str(request.GET.get('ip'))
submission_language = int(request.GET.get('language'))
submission_status_id = int(request.GET.get('status'))

submission_result = ProblemSubmission.objects.create(
problem=submission_problem_id,
student=submission_student_id,
program=submission_program,
created_at=submission_create_at,
runtime=submission_runtime,
memory=submission_memory,
Ip=submission_ip,
language=submission_language,
submission_status=submission_status_id,
)

submission_result = model_to_dict(submission_result)
return self.success(submission_result)

class AddLabAttachmentAPI(APIView):
# create submission of a lab
def post(self, request):
submission_student_id = int(request.GET.get('id_user'))
course_id = int(request.GET.get('id_course'))
lab_id = int(request.GET.get('id_lab'))
attachment_path = int(request.GET.get('file'))
# query from database for submissions of student and problem
try:
labSubmission = LabSubmission.objects.filter(id_student=submission_student_id, id_lab=lab_id)
except ProblemSubmission.DoesNotExist:
return HttpResponse(status=404)
try:
attachment = Attachment.objects.create(
id_lab_submission = labSubmission.id,
path = attachment_path
)
except Exception as e:
return HttpResponse(status=-1)
return HttpResponse(status=0)

5 changes: 3 additions & 2 deletions user/urls/student.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from django.conf.urls import url
from user.views.student import GetStudentListAPI,DeleteStudentAPI
from user.views.student import GetStudentListAPI,DeleteStudentAPI, GetStudentAPI

urlpatterns = [
url(r'student_list?$', GetStudentListAPI.as_view(), name="get_student_list"),
url(r'student_delete?$', DeleteStudentAPI.as_view(), name="delete_student")
url(r'student_delete?$', DeleteStudentAPI.as_view(), name="delete_student"),
url(r'student_get/?$', GetStudentAPI.as_view(), name="get_student")

]
48 changes: 46 additions & 2 deletions user/views/student.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,54 @@
from utils.api import APIView, JSONResponse
from rest_framework import status
from django.http import HttpResponse, JsonResponse
from course.models import Course
import math
from django.contrib.auth.models import Group
from django.db.models import Model

from utils.api import APIView, JSONResponse

from ..models import Student,UserStatus,Gender,User
from django.forms import model_to_dict

class GetStudentAPI(APIView):
def get(self, request):
# get information from frontend #OK#
id_user = int(request.GET.get('id_user'))
NowStudent = Student.objects.get(user=id_user)
NowStudentResult = model_to_dict(NowStudent)
del NowStudentResult['followers']
del NowStudentResult['achievements']
return self.success(NowStudentResult)

def LoginStudentAPI(APIView):
# Login API
def post(self, request):
studentName = request.GET.get('name')
studentPasswordHash = request.GET.get('password_hash')
studentUser = Student.objects.get(name=studentName)
if studentUser:
if studentUser.password_hash == studentPasswordHash:
return HttpResponse(status=0)
else:
return HttpResponse(status=1)
else:
return HttpResponse(status=-1)


def GetStudentCourseAPI(APIView):
# Get Course of an Student
def get(self, request):
idStudent = int(request.GET.get('id_student'))
courseListID = CourseStudent.object.filter(id_student = idStudent)
courseList = []
for item in courseListID.data:
studentCourse = Course.object.get(id = item.id_course)
courseList.append(studentCourse)
courseListSerializer = CourseSerializers(courseList)
return JsonResponse(courseListSerializer.data,status=status.HTTP_200_OK)

def GetMessageAPI(APiView):
pass




Expand Down