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"}