diff --git a/account/migrations/0020_auto_20160424_1241.py b/account/migrations/0020_auto_20160424_1241.py new file mode 100644 index 00000000..842098fd --- /dev/null +++ b/account/migrations/0020_auto_20160424_1241.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-04-24 04:41 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0019_user_is_forbidden'), + ] + + operations = [ + migrations.RenameField( + model_name='userprofile', + old_name='accepted_number', + new_name='accepted_problem_number', + ), + migrations.RemoveField( + model_name='userprofile', + name='rank', + ), + ] diff --git a/account/migrations/0021_auto_20160424_1243.py b/account/migrations/0021_auto_20160424_1243.py new file mode 100644 index 00000000..87a818d8 --- /dev/null +++ b/account/migrations/0021_auto_20160424_1243.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-04-24 04:43 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0020_auto_20160424_1241'), + ] + + operations = [ + migrations.RenameField( + model_name='userprofile', + old_name='submissions_number', + new_name='submission_number', + ), + ] diff --git a/account/models.py b/account/models.py index 033dbe6a..0d6fa24a 100644 --- a/account/models.py +++ b/account/models.py @@ -66,9 +66,8 @@ class UserProfile(models.Model): hduoj_username = models.CharField(max_length=30, blank=True, null=True) bestcoder_username = models.CharField(max_length=30, blank=True, null=True) codeforces_username = models.CharField(max_length=30, blank=True, null=True) - rank = models.IntegerField(default=65535) - accepted_number = models.IntegerField(default=0) - submissions_number = models.IntegerField(default=0) + accepted_problem_number = models.IntegerField(default=0) + submission_number = models.IntegerField(default=0) # JSON字典用来表示该用户的问题的解决状态 1为ac,2为正在进行 problems_status = JSONField(default={}) phone_number = models.CharField(max_length=15, blank=True, null=True) diff --git a/account/views.py b/account/views.py index f57dce7f..5d914344 100644 --- a/account/views.py +++ b/account/views.py @@ -5,6 +5,7 @@ import StringIO from django import http from django.contrib import auth from django.shortcuts import render +from django.core.paginator import Paginator from django.db.models import Q from django.conf import settings from django.http import HttpResponse @@ -472,3 +473,25 @@ class TwoFactorAuthAPIView(APIView): return error_response(u"验证码错误") else: return serializer_invalid_response(serializer) + + +def user_rank_page(request, page=1): + ranks = UserProfile.objects.filter(submission_number__gt=0).order_by("-accepted_problem_number", "-submission_number") + paginator = Paginator(ranks, 20) + try: + ranks = paginator.page(int(page)) + except Exception: + return error_page(request, u"不存在的页码") + previous_page = next_page = None + try: + previous_page = ranks.previous_page_number() + except Exception: + pass + try: + next_page = ranks.next_page_number() + except Exception: + pass + return render(request, "utils/rank.html", {"ranks": ranks, "page": page, + "previous_page": previous_page, + "next_page": next_page, + "start_id": int(page) * 20 - 20,}) \ No newline at end of file diff --git a/oj/urls.py b/oj/urls.py index 0cd8b225..388f0cf4 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -139,6 +139,8 @@ urlpatterns = [ url(r'^reset_password/t/(?P\w+)/$', "account.views.reset_password_page", name="reset_password_page"), url(r'^api/two_factor_auth/$', TwoFactorAuthAPIView.as_view(), name="two_factor_auth_api"), url(r'^two_factor_auth/$', TemplateView.as_view(template_name="oj/account/two_factor_auth.html"), name="two_factor_auth_page"), + url(r'^rank/(?P\d+)/$', "account.views.user_rank_page", name="user_rank_page"), + url(r'^rank/$', "account.views.user_rank_page", name="user_rank_page"), ] diff --git a/template/src/oj_base.html b/template/src/oj_base.html index 94c7baeb..c7dace8c 100644 --- a/template/src/oj_base.html +++ b/template/src/oj_base.html @@ -54,6 +54,7 @@
  • 提交
  • 比赛
  • 小组
  • +
  • 排名
  • 帮助
  • {% if request.user.is_authenticated %} diff --git a/template/src/utils/rank.html b/template/src/utils/rank.html new file mode 100644 index 00000000..434b48f2 --- /dev/null +++ b/template/src/utils/rank.html @@ -0,0 +1,52 @@ +{% extends "oj_base.html" %} +{% block body %} + +
    +
    + + {% if request.user.is_authenticated %} + + + {% endif %} + + + + + + + + + + + + {% for rank in ranks %} + + + + + + + + + {% endfor %} + + +
    我的数据: 通过的题目数量: {{ request.user.userprofile.accepted_problem_number }} + 总提交数量: {{ request.user.userprofile.submission_number }}
    #用户名签名通过的题目数量总提交数量AC 率
    {{ forloop.counter |add:start_id }}{{ rank.user.username }}{% if rank.mood %}{{ rank.mood }}{% endif %}{{ rank.accepted_problem_number }}{{ rank.submission_number }}{% widthratio rank.accepted_problem_number rank.submission_number 100 %}%
    + +
    +
    +{% endblock %}