From d97ef6edca839c0b5c7c14fd3bd69087c9b3daa2 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 11 Oct 2015 11:31:25 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=A2=98=E7=9B=AE=E8=AE=A1=E6=95=B0=E5=99=A8=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=EF=BC=8C=E5=A4=9A=E4=B8=AA=20save=20=E7=9B=B8?= =?UTF-8?q?=E4=BA=92=E8=A6=86=E7=9B=96=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problem/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problem/models.py b/problem/models.py index 5441e95..ece3d91 100644 --- a/problem/models.py +++ b/problem/models.py @@ -50,11 +50,11 @@ class AbstractProblem(models.Model): def add_submission_number(self): self.total_accepted_number += 1 - self.save() + self.save(update_fields=["total_accepted_number"]) def add_ac_number(self): self.total_accepted_number += 1 - self.save() + self.save(update_fields=["total_accepted_number"]) class Problem(AbstractProblem): From 7d6ca62f911b58541a660af7270218ea7ef6d355 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 11 Oct 2015 18:00:02 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=A2=98?= =?UTF-8?q?=E7=9B=AE=20ac=20=E5=92=8C=E6=8F=90=E4=BA=A4=E6=80=BB=E6=95=B0?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problem/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problem/models.py b/problem/models.py index ece3d91..e9844af 100644 --- a/problem/models.py +++ b/problem/models.py @@ -49,8 +49,8 @@ class AbstractProblem(models.Model): abstract = True def add_submission_number(self): - self.total_accepted_number += 1 - self.save(update_fields=["total_accepted_number"]) + self.total_submit_number += 1 + self.save(update_fields=["total_submission_number"]) def add_ac_number(self): self.total_accepted_number += 1 From 72bf41f0bea9875a1936f9b375376729636285a5 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 11 Oct 2015 18:08:24 +0800 Subject: [PATCH 03/14] fix typo --- account/serializers.py | 2 +- problem/models.py | 2 +- tools/run.py | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/account/serializers.py b/account/serializers.py index 948f7c3..528edc7 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -36,7 +36,7 @@ class UserSerializer(serializers.ModelSerializer): class Meta: model = User - fields = ["id", "username", "real_name", "email", "admin_type"] + fields = ["id", "username", "real_name", "email", "admin_type", "create_time", "last_login"] class EditUserSerializer(serializers.Serializer): diff --git a/problem/models.py b/problem/models.py index e9844af..a9e8f74 100644 --- a/problem/models.py +++ b/problem/models.py @@ -50,7 +50,7 @@ class AbstractProblem(models.Model): def add_submission_number(self): self.total_submit_number += 1 - self.save(update_fields=["total_submission_number"]) + self.save(update_fields=["total_submit_number"]) def add_ac_number(self): self.total_accepted_number += 1 diff --git a/tools/run.py b/tools/run.py index fbd7620..2069731 100644 --- a/tools/run.py +++ b/tools/run.py @@ -56,3 +56,6 @@ f.close() print "Please run source /etc/profile" +os.system("ps -ef|grep celery") +print "nohup celery -A judge.judger_controller worker -l DEBUG" + From b34009a6b3b9dc2f327518c30f957bce1565d6a2 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 12 Oct 2015 12:53:16 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B0=8F=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0010_remove_user_login_failed_counter.py | 18 ++++++++++++++++++ template/src/oj/announcement/announcement.html | 5 ++--- 2 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 account/migrations/0010_remove_user_login_failed_counter.py diff --git a/account/migrations/0010_remove_user_login_failed_counter.py b/account/migrations/0010_remove_user_login_failed_counter.py new file mode 100644 index 0000000..61e09f1 --- /dev/null +++ b/account/migrations/0010_remove_user_login_failed_counter.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0009_user_reset_password_token_create_time'), + ] + + operations = [ + migrations.RemoveField( + model_name='user', + name='login_failed_counter', + ), + ] diff --git a/template/src/oj/announcement/announcement.html b/template/src/oj/announcement/announcement.html index 2ce84a1..8cbc239 100644 --- a/template/src/oj/announcement/announcement.html +++ b/template/src/oj/announcement/announcement.html @@ -10,11 +10,10 @@ 作者:{{ announcement.created_by }}     创建时间:{{ announcement.create_time }} - {% ifequal announcement.create_time announcement.last_update_time %} - {% else %} + {% ifnotequal announcement.create_time announcement.last_update_time %}     最后更新:{{ announcement.last_update_time }} - {% endifequal %} + {% endifnotequal %}

From 59ede6f762672aabc1d8d50ab707d50bf814e0b5 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 12 Oct 2015 18:21:30 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AD=94=E9=A2=98?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=AD=E7=9A=84=20keyerror?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mq/scripts/mq.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mq/scripts/mq.py b/mq/scripts/mq.py index 48cf0f3..7ba83fb 100644 --- a/mq/scripts/mq.py +++ b/mq/scripts/mq.py @@ -50,6 +50,8 @@ class MessageQueue(object): # 更新普通题目的计数器 problem.add_submission_number() + if "problems" not in problems_status: + problems_status["problems"] = {} if submission.result == result["accepted"]: problem.add_ac_number() problems_status["problems"][str(problem.id)] = 1 @@ -88,6 +90,8 @@ class MessageQueue(object): problems_status = user.problems_status contest_problem.add_submission_number() + if "contest_problems" not in problems_status: + problems_status["contest_problems"] = {} if submission.result == result["accepted"]: contest_problem.add_ac_number() problems_status["contest_problems"][str(contest_problem.id)] = 1 From dd0b2042dccec584b52cdb9508bff2d5f57302de Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 12 Oct 2015 18:22:24 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account/migrations/0011_user_auth_token.py | 19 +++++++++++++++++++ account/migrations/0012_auto_20151012_1546.py | 19 +++++++++++++++++++ account/models.py | 4 +++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 account/migrations/0011_user_auth_token.py create mode 100644 account/migrations/0012_auto_20151012_1546.py diff --git a/account/migrations/0011_user_auth_token.py b/account/migrations/0011_user_auth_token.py new file mode 100644 index 0000000..01a3dc5 --- /dev/null +++ b/account/migrations/0011_user_auth_token.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0010_remove_user_login_failed_counter'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='auth_token', + field=models.CharField(max_length=40, null=True, blank=True), + ), + ] diff --git a/account/migrations/0012_auto_20151012_1546.py b/account/migrations/0012_auto_20151012_1546.py new file mode 100644 index 0000000..a4f937d --- /dev/null +++ b/account/migrations/0012_auto_20151012_1546.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0011_user_auth_token'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='create_time', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + ] diff --git a/account/models.py b/account/models.py index ee0cf18..4c6bfca 100644 --- a/account/models.py +++ b/account/models.py @@ -29,7 +29,7 @@ class User(AbstractBaseUser): # 用户邮箱 email = models.EmailField(max_length=254, blank=True, null=True) # 用户注册时间 - create_time = models.DateTimeField(auto_now_add=True) + create_time = models.DateTimeField(auto_now_add=True, null=True) # 0代表不是管理员 1是普通管理员 2是超级管理员 admin_type = models.IntegerField(default=0) # JSON字典用来表示该用户的问题的解决状态 1为ac,2为正在进行 @@ -38,6 +38,8 @@ class User(AbstractBaseUser): reset_password_token = models.CharField(max_length=40, blank=True, null=True) # token 生成时间 reset_password_token_create_time = models.DateTimeField(blank=True, null=True) + # 论坛授权token + auth_token = models.CharField(max_length=40, blank=True, null=True) USERNAME_FIELD = 'username' REQUIRED_FIELDS = [] From a011f129018fa0aa7008fa073b5a08c3029adb8a Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 12 Oct 2015 18:32:38 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E9=A2=98=E7=9B=AE=E6=8F=90=E4=BA=A4=E7=AD=9B=E9=80=89=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- submission/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submission/views.py b/submission/views.py index 50102a0..f12b52c 100644 --- a/submission/views.py +++ b/submission/views.py @@ -149,7 +149,7 @@ class SubmissionAdminAPIView(APIView): problem_id = request.GET.get("problem_id", None) if not problem_id: return error_response(u"参数错误") - submissions = Submission.objects.filter(problem_id=problem_id).order_by("-create_time") + submissions = Submission.objects.filter(problem_id=problem_id, contest_id__isnumm=True).order_by("-create_time") return paginate(request, submissions, SubmissionSerializer) From e341d6dc7135fa385cf853d10cdecf936ebb32e4 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 12 Oct 2015 18:34:09 +0800 Subject: [PATCH 08/14] fix typo --- submission/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submission/views.py b/submission/views.py index f12b52c..caa2e68 100644 --- a/submission/views.py +++ b/submission/views.py @@ -149,7 +149,7 @@ class SubmissionAdminAPIView(APIView): problem_id = request.GET.get("problem_id", None) if not problem_id: return error_response(u"参数错误") - submissions = Submission.objects.filter(problem_id=problem_id, contest_id__isnumm=True).order_by("-create_time") + submissions = Submission.objects.filter(problem_id=problem_id, contest_id__isnull=True).order_by("-create_time") return paginate(request, submissions, SubmissionSerializer) From 46cebddb95e4936b878699329781d313d19e74f8 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Tue, 13 Oct 2015 09:03:04 +0800 Subject: [PATCH 09/14] update read --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d3e2a57..043cae0 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,15 @@ 基于 Python 和 Django的在线评测平台。 -文档:https://www.zybuluo.com/virusdefender/note/171932 +文档:http://qingdaou.github.io/OnlineJudge/ demo: https://qduoj.com TODO: - - 完善文档,目前还差很多 - 完善测试 + - 完善小组功能 + - 后台重构 ![oj_previewindex.png][1] From 07d6bddebb4a6494cc25b9ba7e2a357fc220dfb8 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Tue, 13 Oct 2015 09:03:35 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=20bootstrap?= =?UTF-8?q?=20=E7=9A=84=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/build.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/static/src/js/build.js b/static/src/js/build.js index d135481..ba08615 100644 --- a/static/src/js/build.js +++ b/static/src/js/build.js @@ -73,6 +73,9 @@ appDir: "../", dir: "../../release/", modules: [ + { + name: "bootstrap", + }, { name: "announcement_0_pack" }, From 306c4ccce913cce1a4780d036431bb370568b81d Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Tue, 13 Oct 2015 09:03:53 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=BD=91?= =?UTF-8?q?=E7=AB=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/templatetags/website_info.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/templatetags/website_info.py b/utils/templatetags/website_info.py index 85b6c23..98c19ea 100644 --- a/utils/templatetags/website_info.py +++ b/utils/templatetags/website_info.py @@ -1,8 +1,9 @@ # coding=utf-8 from django import template +from django.conf import settings register = template.Library() @register.simple_tag def show_website_info(name): - return {"website_name": "qduoj", "website_footer": u"青岛大学信息工程学院 创新实验室"}[name] + return settings.WEBSITE_INFO[name] From 9da4a729550901d3da34670954e61092198f19da Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Tue, 13 Oct 2015 09:04:03 +0800 Subject: [PATCH 12/14] fix typo --- tools/run.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/run.py b/tools/run.py index 2069731..5c73383 100644 --- a/tools/run.py +++ b/tools/run.py @@ -57,5 +57,5 @@ f.close() print "Please run source /etc/profile" os.system("ps -ef|grep celery") -print "nohup celery -A judge.judger_controller worker -l DEBUG" +print "nohup celery -A judge.judger_controller worker -l DEBUG &" From 54581cff532fa974a044be549ce97505b3ab533a Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Tue, 13 Oct 2015 09:04:41 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E5=8A=A0=E5=BC=BA=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=BC=BA=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/shortcuts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/shortcuts.py b/utils/shortcuts.py index f650e52..e3af916 100644 --- a/utils/shortcuts.py +++ b/utils/shortcuts.py @@ -102,5 +102,5 @@ def paginate(request, query_set, object_serializer=None): def rand_str(length=32): - string = hashlib.md5(str(time.time()) + str(random.randrange(1, 987654321234567))).hexdigest() + string = hashlib.md5(str(time.time()) + str(random.randrange(1, 987654321234567)) + str(random.randrange(1, 987654321234567))).hexdigest() return string[0:length] \ No newline at end of file From b418d913269d7773b4480ada59ab75f5fa65f2e9 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Tue, 13 Oct 2015 09:07:34 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E5=B0=86=E7=BD=91=E7=AB=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=94=BE=E5=85=A5=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/settings.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/oj/settings.py b/oj/settings.py index 849885c..dd437a9 100644 --- a/oj/settings.py +++ b/oj/settings.py @@ -181,4 +181,8 @@ DATABASE_ROUTERS = ['oj.db_router.DBRouter'] TEST_CASE_DIR = os.path.join(BASE_DIR, 'test_case/') -IMAGE_UPLOAD_DIR = os.path.join(BASE_DIR, 'upload/') \ No newline at end of file +IMAGE_UPLOAD_DIR = os.path.join(BASE_DIR, 'upload/') + +WEBSITE_INFO = {"website_name": "qduoj", + "website_footer": u"青岛大学信息工程学院 创新实验室", + "url": "https://qduoj.com"}