mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 16:33:22 +00:00
增加比赛结果缓存
This commit is contained in:
parent
634bc82024
commit
67de24a5b3
@ -1,6 +1,7 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
import json
|
import json
|
||||||
import datetime
|
import datetime
|
||||||
|
import redis
|
||||||
|
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.db import IntegrityError
|
from django.db import IntegrityError
|
||||||
@ -8,6 +9,7 @@ from django.utils import dateparse
|
|||||||
from django.db.models import Q, Sum
|
from django.db.models import Q, Sum
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
@ -383,8 +385,19 @@ def contest_list_page(request, page=1):
|
|||||||
@check_user_contest_permission
|
@check_user_contest_permission
|
||||||
def contest_rank_page(request, contest_id):
|
def contest_rank_page(request, contest_id):
|
||||||
contest = Contest.objects.get(id=contest_id)
|
contest = Contest.objects.get(id=contest_id)
|
||||||
contest_problems = ContestProblem.objects.filter(contest=contest).order_by("sort_index")[:20]
|
contest_problems = ContestProblem.objects.filter(contest=contest).order_by("sort_index")
|
||||||
rank = ContestRank.objects.filter(contest_id=contest_id).select_related("user").order_by("-total_ac_number", "total_time")
|
r = redis.Redis(host=settings.REDIS_CACHE["host"], port=settings.REDIS_CACHE["port"], db=settings.REDIS_CACHE["db"])
|
||||||
|
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]))
|
||||||
|
else:
|
||||||
|
rank = json.loads(rank)
|
||||||
return render(request, "oj/contest/contest_rank.html",
|
return render(request, "oj/contest/contest_rank.html",
|
||||||
{"rank": rank, "contest": contest,
|
{"rank": rank, "contest": contest,
|
||||||
"contest_problems": contest_problems,
|
"contest_problems": contest_problems,
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
import datetime
|
import json
|
||||||
from django.utils.timezone import now
|
|
||||||
|
|
||||||
|
|
||||||
def get_contest_status(contest):
|
def get_contest_status(contest):
|
||||||
@ -34,10 +33,11 @@ def get_the_formatted_time(seconds):
|
|||||||
|
|
||||||
|
|
||||||
def get_submission_class(rank, problem):
|
def get_submission_class(rank, problem):
|
||||||
if str(problem.id) not in rank.submission_info:
|
submission_info = json.loads(rank["submission_info"])
|
||||||
|
if str(problem.id) not in submission_info:
|
||||||
return ""
|
return ""
|
||||||
else:
|
else:
|
||||||
submission = rank.submission_info[str(problem.id)]
|
submission = submission_info[str(problem.id)]
|
||||||
if submission["is_ac"]:
|
if submission["is_ac"]:
|
||||||
_class = "alert-success"
|
_class = "alert-success"
|
||||||
if submission["is_first_ac"]:
|
if submission["is_first_ac"]:
|
||||||
@ -48,10 +48,11 @@ def get_submission_class(rank, problem):
|
|||||||
|
|
||||||
|
|
||||||
def get_submission_content(rank, problem):
|
def get_submission_content(rank, problem):
|
||||||
if str(problem.id) not in rank.submission_info:
|
submission_info = json.loads(rank["submission_info"])
|
||||||
|
if str(problem.id) not in submission_info:
|
||||||
return ""
|
return ""
|
||||||
else:
|
else:
|
||||||
submission = rank.submission_info[str(problem.id)]
|
submission = submission_info[str(problem.id)]
|
||||||
if submission["is_ac"]:
|
if submission["is_ac"]:
|
||||||
r = get_the_formatted_time(submission["ac_time"])
|
r = get_the_formatted_time(submission["ac_time"])
|
||||||
if submission["error_number"]:
|
if submission["error_number"]:
|
||||||
|
Loading…
Reference in New Issue
Block a user