实现了比赛提交列表里封榜的行为,封榜以后只显示缓存里的提交数据和封榜后自己的提交,封榜以后rank不再刷新(rank里还不会显示自己封榜以后的提交。。。这好像不对呀)

This commit is contained in:
sxw@401 2015-09-16 11:30:45 +08:00
parent 7f42ad7009
commit 03ef1e49f3

View File

@ -1,9 +1,11 @@
# coding=utf-8
import json
from datetime import datetime
import redis
import pytz
from django.shortcuts import render
from django.core.paginator import Paginator
from django.utils import timezone
from rest_framework.views import APIView
from judge.judger_controller.tasks import judge
@ -21,7 +23,6 @@ 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):
@ -77,6 +78,20 @@ def contest_problem_my_submissions_list_page(request, contest_id, contest_proble
{"submissions": submissions, "problem": contest_problem})
def get_formatted_datetime(date_time):
date_time = timezone.localtime(date_time)
result = str(date_time.minute)
if date_time.minute < 10:
result = "0" + result
result = str(date_time.hour) + ":" + result
if date_time.hour < 10:
result = "0" + result
result = str(date_time.day) + u"" + result
result = str(date_time.month) + u"" + result
result = str(date_time.year) + u"" + result
return result
@login_required
def contest_problem_submissions_list_page(request, contest_id, page=1):
"""
@ -93,18 +108,26 @@ def contest_problem_submissions_list_page(request, contest_id, page=1):
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")
# 把datetime类型转换为string
for submission in submissions:
submission["create_time"] = get_formatted_datetime(submission["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)
time = datetime.strptime(submissions[0]["create_time"].encode("utf8"),
'%Y\xe5\xb9\xb4%m\xe6\x9c\x88%d\xe6\x97\xa5 %H:%M')
time = time.replace(tzinfo=pytz.timezone('Asia/Shanghai'))
else:
submissions = []
time = contest.start_time
# 除了缓存里的还要加上封榜以后自己的提交
submissions += Submission.objects.filter(contest_id=contest_id, user_id=request.user, cerate_time__gte=time). \
self_submissions = Submission.objects.filter(contest_id=int(contest_id), user_id=request.user.id, create_time__gte=time). \
values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language",
"user_id").order_by("-create_time")
submissions = list(self_submissions) + submissions
language = request.GET.get("language", None)
filter = None