在最近的幾天,主要是改正在以往contest
的實現(xiàn)中存在的一些問題色乾,主要是:
1 無法從contest
的overview
中進(jìn)入題目的詳細(xì)說明頁面
2 用戶在submit
中提交的代碼無法正常在Status
中顯示評測狀態(tài)
3 Contest
的時區(qū)設(shè)置錯誤誊册,沒有設(shè)置為東八區(qū)時間
4 實現(xiàn)了Contest
的中的倒計時功能
修改過后的contest_get_problem方法####
def contest_get_problem(req, cid):
if req.is_ajax():
contest = Contest.objects.get(id=cid)
pid = req.GET.get('pid')
t = loader.get_template('contest/contest_problem.html')
problem = Problem.objects.get(proid=pid)
if contest.private:
if req.user.is_superuser==False and req.user.info not in contest.accounts.all() :
problem = []
#content_html = t.render(Context({'problem': problem, 'user' : req.user}))
# return HttpResponse(content_html)
return render(req,'contest/contest_problem.html',{'problem': problem, 'user' : req.user})
修改過后的submit方法####
def contest_submit(req, cid):
contest = Contest.objects.get(id=cid)
#time = datetime.datetime.now(pytz.timezone(pytz.country_timezones('cn')[0]))
# time1=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
time=timezone.now()
# print(contest.start_time + contest.duration_time)
if time > contest.start_time + contest.duration_time:
finish = True
else:
finish = False
if contest.private:
if req.user.is_superuser==False and req.user.info not in contest.accounts.all() :
return HttpResponseRedirect("/contest/" + cid + "/")
if req.method == 'GET':
return ren2res("contest/contest_submit.html", req, {'contest': contest, 'problems': contest.get_problem_list()})
elif req.method == 'POST':
pid = req.POST.get('pid')
#need change start
# sub = Status(pro=Problem.objects.get(proid=pid), user=req.user, lang=req.POST.get('lang'))
sub = Status(user=req.user, pro=Problem.objects.get(proid=pid), lang=req.POST.get('lang'), result='Waiting',
time=time)
if not finish:
sub.cid = contest.id
else:
sub.cid = -1
sub.save()
if req.POST.get('code'):
content_file = ContentFile(req.POST.get('code'))
elif req.FILES:
content_file = ContentFile(req.FILES['file'].read())
else:
return ren2res("contest/contest_submit.html", req,
{'contest': contest, 'problems': contest.get_problem_list(), 'err': 'No Submit!'})
#sub.source_code.save(name=str(sub.runid), content=content_file)
sub.save()
#judger.Judger(sub)
#result=judge_delay.delay(sub)
if not finish:
return HttpResponseRedirect("/contest/" + cid + "/")
else:
return HttpResponseRedirect("/contest/"+cid+"/status?pid=" + pid)
#need change end
contest
實現(xiàn)正確的計時:
接下來主要集中在開發(fā)contest
的clarification
功能,以及整個virtualJudge
的Rank
功能