From 7f42ad70094fd17dd9ea167d89e714e20325928e Mon Sep 17 00:00:00 2001 From: "sxw@401" Date: Wed, 16 Sep 2015 09:19:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=AF=94=E8=B5=9B=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E9=A1=B5=E9=9D=A2=E5=B0=81=E6=A6=9C=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest_submission/views.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/contest_submission/views.py b/contest_submission/views.py index 2358b076..40b3c207 100644 --- a/contest_submission/views.py +++ b/contest_submission/views.py @@ -20,6 +20,8 @@ from utils.shortcuts import serializer_invalid_response, error_response, success from submission.models import Submission from .serializers import CreateContestSubmissionSerializer from submission.serializers import SubmissionSerializer +from oj.settings import REDIS_CACHE +import redis class ContestSubmissionAPIView(APIView): @@ -85,8 +87,25 @@ def contest_problem_submissions_list_page(request, contest_id, page=1): except Contest.DoesNotExist: return error_page(request, u"比赛不存在") # 以下是本场比赛中所有的提交 - submissions = Submission.objects.filter(contest_id=contest_id). \ - values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language", "user_id").order_by("-create_time") + r = redis.Redis(host=REDIS_CACHE["host"], port=REDIS_CACHE["port"], db=REDIS_CACHE["db"]) + if contest.real_time_rank: + # 更新submissions缓存 + submissions = Submission.objects.filter(contest_id=contest_id). \ + values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language", + "user_id").order_by("-create_time") + r.set("contest_submissions_" + contest_id, json.dumps(list(submissions))) + else: + # 已封榜 + submissions = r.get("contest_submissions_" + contest_id) + if submissions: + submissions = json.loads(submissions) + else: + submissions = [] + # 除了缓存里的还要加上封榜以后自己的提交 + submissions += Submission.objects.filter(contest_id=contest_id, user_id=request.user, cerate_time__gte=time). \ + values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language", + "user_id").order_by("-create_time") + language = request.GET.get("language", None) filter = None if language: @@ -131,7 +150,7 @@ 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, "filter":filter}) + "contest": contest, "filter": filter}) class ContestSubmissionAdminAPIView(APIView):