From 2e6a65d071485fae64727114e5a9cc8436cbb02b Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Fri, 1 Apr 2016 21:15:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E7=AE=A1=E7=90=86=E5=91=98=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=BC=BA=E5=88=B6=E6=98=BE=E7=A4=BA=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E6=8E=92=E5=90=8D=E7=9A=84=E5=8F=82=E6=95=B0=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E6=AF=94=E8=B5=9B=E5=B0=81=E6=A6=9C=E5=90=8E=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E6=9F=A5=E7=9C=8B=E6=9C=80=E6=96=B0=E6=8E=92?= =?UTF-8?q?=E5=90=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest/views.py | 37 +++++++++++++++-------- template/src/oj/contest/contest_rank.html | 11 +++---- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/contest/views.py b/contest/views.py index db144f4..53075b0 100644 --- a/contest/views.py +++ b/contest/views.py @@ -434,30 +434,41 @@ def contest_list_page(request, page=1): "keyword": keyword, "join": join}) +def _get_rank(contest_id): + rank = ContestRank.objects.filter(contest_id=contest_id). \ + select_related("user"). \ + order_by("-total_ac_number", "total_time"). \ + values("id", "user__id", "user__username", "user__real_name", "user__userprofile__student_id", + "contest_id", "submission_info", "total_submission_number", "total_ac_number", "total_time") + return rank + + @check_user_contest_permission def contest_rank_page(request, contest_id): contest = Contest.objects.get(id=contest_id) contest_problems = ContestProblem.objects.filter(contest=contest, visible=True).order_by("sort_index") - r = get_cache_redis() - cache_key = str(contest_id) + "_rank_cache" - rank = r.get(cache_key) - - if not rank: - rank = ContestRank.objects.filter(contest_id=contest_id). \ - select_related("user"). \ - order_by("-total_ac_number", "total_time"). \ - values("id", "user__id", "user__username", "user__real_name", "contest_id", "submission_info", - "total_submission_number", "total_ac_number", "total_time") - r.set(cache_key, json.dumps([dict(item) for item in rank])) + force_real_time_rank = False + if request.GET.get("force_real_time_rank") == "true" and (request.user.admin_type == SUPER_ADMIN or request.user == contest.created_by): + rank = _get_rank(contest_id) + force_real_time_rank = True else: - rank = json.loads(rank) + r = get_cache_redis() + cache_key = str(contest_id) + "_rank_cache" + rank = r.get(cache_key) + + if not rank: + rank = _get_rank(contest_id) + r.set(cache_key, json.dumps([dict(item) for item in rank])) + else: + rank = json.loads(rank) return render(request, "oj/contest/contest_rank.html", {"rank": rank, "contest": contest, "contest_problems": contest_problems, "auto_refresh": request.GET.get("auto_refresh", None) == "true", - "show_real_name": request.GET.get("show_real_name", None) == "true", }) + "show_real_name": request.GET.get("show_real_name", None) == "true", + "force_real_time_rank": force_real_time_rank}) class ContestTimeAPIView(APIView): diff --git a/template/src/oj/contest/contest_rank.html b/template/src/oj/contest/contest_rank.html index aae0c23..b701a49 100644 --- a/template/src/oj/contest/contest_rank.html +++ b/template/src/oj/contest/contest_rank.html @@ -23,13 +23,12 @@