Accept Merge Request #278 dev -> master : (dev -> master)

Merge Request: dev -> master
Created By: @virusdefender
Accepted By: @virusdefender
URL: https://coding.net/u/virusdefender/p/qduoj/git/merge/278
This commit is contained in:
virusdefender 2015-10-13 09:11:49 +08:00
commit 1e33b8df3f
15 changed files with 87 additions and 14 deletions

View File

@ -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]

View File

@ -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',
),
]

View File

@ -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),
),
]

View File

@ -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),
),
]

View File

@ -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为ac2为正在进行
@ -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 = []

View File

@ -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):

View File

@ -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

View File

@ -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/')
IMAGE_UPLOAD_DIR = os.path.join(BASE_DIR, 'upload/')
WEBSITE_INFO = {"website_name": "qduoj",
"website_footer": u"青岛大学信息工程学院 创新实验室",
"url": "https://qduoj.com"}

View File

@ -49,12 +49,12 @@ class AbstractProblem(models.Model):
abstract = True
def add_submission_number(self):
self.total_accepted_number += 1
self.save()
self.total_submit_number += 1
self.save(update_fields=["total_submit_number"])
def add_ac_number(self):
self.total_accepted_number += 1
self.save()
self.save(update_fields=["total_accepted_number"])
class Problem(AbstractProblem):

View File

@ -73,6 +73,9 @@
appDir: "../",
dir: "../../release/",
modules: [
{
name: "bootstrap",
},
{
name: "announcement_0_pack"
},

View File

@ -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__isnull=True).order_by("-create_time")
return paginate(request, submissions, SubmissionSerializer)

View File

@ -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 %}
</p>
<div>

View File

@ -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 &"

View File

@ -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]

View File

@ -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]