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