From 1c835cfa2e42a411e47b03c1d74a44b621d8cbc5 Mon Sep 17 00:00:00 2001 From: esp Date: Wed, 26 Aug 2015 12:59:14 +0800 Subject: [PATCH] =?UTF-8?q?[API]=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=AF=94=E8=B5=9B=E6=8F=90=E4=BA=A4adminAPI^C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest_submission/views.py | 38 +++++++++++++++++++++++++++++++++++-- oj/urls.py | 4 ++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/contest_submission/views.py b/contest_submission/views.py index 0dba7cb..652047e 100644 --- a/contest_submission/views.py +++ b/contest_submission/views.py @@ -21,6 +21,7 @@ from utils.shortcuts import serializer_invalid_response, error_response, success from submission.models import Submission from .serializers import CreateContestSubmissionSerializer +from submission.serializers import SubmissionSerializer class ContestSubmissionAPIView(APIView): @@ -76,7 +77,8 @@ def contest_problem_my_submissions_list_page(request, contest_id, contest_proble contest_problem = ContestProblem.objects.get(id=contest_problem_id, visible=True) except Problem.DoesNotExist: return error_page(request, u"比赛问题不存在") - submissions = Submission.objects.filter(user_id=request.user.id, problem_id=contest_problem.id).order_by("-create_time"). \ + submissions = Submission.objects.filter(user_id=request.user.id, problem_id=contest_problem.id).order_by( + "-create_time"). \ values("id", "result", "create_time", "accepted_answer_time", "language") return render(request, "oj/contest/my_submissions_list.html", {"submissions": submissions, "problem": contest_problem}) @@ -112,4 +114,36 @@ def contest_problem_submissions_list_page(request, contest_id, page=1): return render(request, "oj/contest/submissions_list.html", {"submissions": current_page, "page": int(page), "previous_page": previous_page, "next_page": next_page, "start_id": int(page) * 20 - 20, - "contest": contest}) \ No newline at end of file + "contest": contest}) + + +class ContestSubmissionAdminAPIView(APIView): + def get(self, request): + """ + 查询比赛提交,单个比赛题目提交的adminAPI + --- + response_serializer: SubmissionSerializer + """ + problem_id = request.GET.get("problem_id", None) + contest_id = request.GET.get("contest_id", None) + if contest_id: + try: + contest = Contest.objects.get(pk=contest_id) + except Contest.DoesNotExist: + return error_response(u"比赛不存在!") + if request.user.admin_type != SUPER_ADMIN and contest.created_by != request.user: + return error_response(u"您无权查看该信息!") + submissions = Submission.objects.filter(contest_id=contest_id).order_by("-create_time") + else: + if problem_id: + try: + contest_problem = ContestProblem.objects.get(pk=problem_id) + except ContestProblem.DoesNotExist: + return error_response(u"问题不存在!") + submissions = Submission.objects.filter(contest_id=contest_problem.contest_id).order_by("-create_time") + else: + return error_response(u"参数错误!") + if problem_id: + submissions = submissions.filter(problem_id=problem_id) + + return paginate(request, submissions, SubmissionSerializer) diff --git a/oj/urls.py b/oj/urls.py index adb7ef0..74a44c2 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -17,7 +17,7 @@ from admin.views import AdminTemplateView from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView from submission.views import SubmissionAPIView, SubmissionAdminAPIView -from contest_submission.views import ContestSubmissionAPIView +from contest_submission.views import ContestSubmissionAPIView, ContestSubmissionAdminAPIView from monitor.views import QueueLengthMonitorAPIView from contest_submission.views import contest_problem_my_submissions_list_page @@ -65,7 +65,7 @@ urlpatterns = [ name="join_group_request_admin_api"), url(r'^api/admin/submission/$', SubmissionAdminAPIView.as_view(), name="submission_admin_api_view"), url(r'^api/admin/monitor/$', QueueLengthMonitorAPIView.as_view(), name="queue_length_monitor_api"), - + url(r'^api/admin/contest_submission/$', ContestSubmissionAdminAPIView.as_view(), name="contest_submission_admin_api_view"), url(r'^contest/(?P\d+)/problem/(?P\d+)/$', "contest.views.contest_problem_page",