实现了比赛提交列表里封榜的行为,封榜以后只显示缓存里的提交数据和封榜后自己的提交,封榜以后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 # coding=utf-8
import json import json
from datetime import datetime
import redis import redis
import pytz
from django.shortcuts import render from django.shortcuts import render
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.utils import timezone
from rest_framework.views import APIView from rest_framework.views import APIView
from judge.judger_controller.tasks import judge from judge.judger_controller.tasks import judge
@@ -21,7 +23,6 @@ from submission.models import Submission
from .serializers import CreateContestSubmissionSerializer from .serializers import CreateContestSubmissionSerializer
from submission.serializers import SubmissionSerializer from submission.serializers import SubmissionSerializer
from oj.settings import REDIS_CACHE from oj.settings import REDIS_CACHE
import redis
class ContestSubmissionAPIView(APIView): class ContestSubmissionAPIView(APIView):
@@ -77,6 +78,20 @@ def contest_problem_my_submissions_list_page(request, contest_id, contest_proble
{"submissions": submissions, "problem": contest_problem}) {"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 @login_required
def contest_problem_submissions_list_page(request, contest_id, page=1): 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). \ submissions = Submission.objects.filter(contest_id=contest_id). \
values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language", values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language",
"user_id").order_by("-create_time") "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))) r.set("contest_submissions_" + contest_id, json.dumps(list(submissions)))
else: else:
# 已封榜 # 已封榜
submissions = r.get("contest_submissions_" + contest_id) submissions = r.get("contest_submissions_" + contest_id)
if submissions: if submissions:
submissions = json.loads(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: else:
submissions = [] 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", values("id", "contest_id", "problem_id", "result", "create_time", "accepted_answer_time", "language",
"user_id").order_by("-create_time") "user_id").order_by("-create_time")
submissions = list(self_submissions) + submissions
language = request.GET.get("language", None) language = request.GET.get("language", None)
filter = None filter = None