From 3d396cc8e47452be2deac8291b88a79dd8e41e94 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Wed, 6 Apr 2016 13:49:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B=E7=89=88=E6=9C=AC=E5=8F=B7=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?judger=E9=87=8D=E6=96=B0=E7=BC=96=E8=AF=91spj=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0016_contestproblem_spj_version.py | 20 +++++++++++++++++++ contest/views.py | 11 +++++++++- .../migrations/0014_problem_spj_version.py | 20 +++++++++++++++++++ problem/models.py | 1 + problem/views.py | 12 +++++++++-- 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 contest/migrations/0016_contestproblem_spj_version.py create mode 100644 problem/migrations/0014_problem_spj_version.py diff --git a/contest/migrations/0016_contestproblem_spj_version.py b/contest/migrations/0016_contestproblem_spj_version.py new file mode 100644 index 00000000..749654e5 --- /dev/null +++ b/contest/migrations/0016_contestproblem_spj_version.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.1 on 2016-04-06 04:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contest', '0015_auto_20160404_1641'), + ] + + operations = [ + migrations.AddField( + model_name='contestproblem', + name='spj_version', + field=models.CharField(blank=True, max_length=32, null=True), + ), + ] diff --git a/contest/views.py b/contest/views.py index 82fc692f..976530c0 100644 --- a/contest/views.py +++ b/contest/views.py @@ -1,7 +1,8 @@ # coding=utf-8 import json +import os import datetime -import redis +import hashlib from django.shortcuts import render from django.db import IntegrityError @@ -176,6 +177,11 @@ class ContestAdminAPIView(APIView): class ContestProblemAdminAPIView(APIView): + def _spj_version(self, code): + if code is None: + return None + return hashlib.md5(code.encode("utf-8")).hexdigest() + def post(self, request): """ 比赛题目发布json api接口 @@ -205,6 +211,7 @@ class ContestProblemAdminAPIView(APIView): spj=data["spj"], spj_language=data["spj_language"], spj_code=data["spj_code"], + spj_version=self._spj_version(data["spj_code"]), created_by=request.user, hint=data["hint"], contest=contest, @@ -228,6 +235,7 @@ class ContestProblemAdminAPIView(APIView): contest_problem = ContestProblem.objects.get(id=data["id"]) except ContestProblem.DoesNotExist: return error_response(u"该比赛题目不存在!") + contest = Contest.objects.get(id=contest_problem.contest_id) if request.user.admin_type != SUPER_ADMIN and contest.created_by != request.user: return error_response(u"比赛不存在") @@ -241,6 +249,7 @@ class ContestProblemAdminAPIView(APIView): contest_problem.spj = data["spj"] contest_problem.spj_language = data["spj_language"] contest_problem.spj_code = data["spj_code"] + contest_problem.spj_version = self._spj_version(data["spj_code"]) contest_problem.samples = json.dumps(data["samples"]) contest_problem.hint = data["hint"] contest_problem.visible = data["visible"] diff --git a/problem/migrations/0014_problem_spj_version.py b/problem/migrations/0014_problem_spj_version.py new file mode 100644 index 00000000..92bf6a46 --- /dev/null +++ b/problem/migrations/0014_problem_spj_version.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.1 on 2016-04-06 04:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('problem', '0013_auto_20160404_1641'), + ] + + operations = [ + migrations.AddField( + model_name='problem', + name='spj_version', + field=models.CharField(blank=True, max_length=32, null=True), + ), + ] diff --git a/problem/models.py b/problem/models.py index a0491b6c..008b50a9 100644 --- a/problem/models.py +++ b/problem/models.py @@ -42,6 +42,7 @@ class AbstractProblem(models.Model): spj = models.BooleanField(default=False) spj_language = models.IntegerField(blank=True, null=True) spj_code = models.TextField(blank=True, null=True) + spj_version = models.CharField(max_length=32, blank=True, null=True) # 是否可见 false的话相当于删除 visible = models.BooleanField(default=True) # 总共提交数量 diff --git a/problem/views.py b/problem/views.py index 89a6e631..005bfdf3 100644 --- a/problem/views.py +++ b/problem/views.py @@ -66,6 +66,11 @@ class ProblemTagAdminAPIView(APIView): class ProblemAdminAPIView(APIView): + def _spj_version(self, code): + if code is None: + return None + return hashlib.md5(code.encode("utf-8")).hexdigest() + @super_admin_required def post(self, request): """ @@ -94,6 +99,7 @@ class ProblemAdminAPIView(APIView): spj=data["spj"], spj_language=data["spj_language"], spj_code=data["spj_code"], + spj_version=self._spj_version(data["spj_code"]), difficulty=data["difficulty"], created_by=request.user, hint=data["hint"], @@ -120,6 +126,7 @@ class ProblemAdminAPIView(APIView): if serializer.is_valid(): data = serializer.data problem = Problem.objects.get(id=data["id"]) + problem.title = data["title"] problem.description = data["description"] problem.input_description = data["input_description"] @@ -131,6 +138,7 @@ class ProblemAdminAPIView(APIView): problem.spj = data["spj"] problem.spj_language = data["spj_language"] problem.spj_code = data["spj_code"] + problem.spj_version = self._spj_version(data["spj_code"]) problem.difficulty = data["difficulty"] problem.samples = json.dumps(data["samples"]) problem.hint = data["hint"] @@ -146,7 +154,9 @@ class ProblemAdminAPIView(APIView): except ProblemTag.DoesNotExist: tag = ProblemTag.objects.create(name=tag) problem.tags.add(tag) + problem.save() + return success_response(ProblemSerializer(problem).data) else: return serializer_invalid_response(serializer) @@ -237,8 +247,6 @@ class TestCaseUploadAPIView(APIView): # 否则就应该是spj的测试用例 spj = True - print name_list, spj - if not spj: if len(name_list) % 2 == 1: return error_response(u"测试用例文件格式错误,文件数目为奇数")