Example #1
0
def user_index_page(request, username):
    try:
        user = User.objects.get(username=username)
    except User.DoesNotExist:
        return error_page(request, u"用户不存在")

    blog_link = ""

    if user.userprofile.blog:
        blog_link = user.userprofile.blog.replace("http://", "").replace("https://", "")

    messages = Message.objects.filter(leave_to=user).order_by("-created_time")

    page = request.GET.get('page', 1)
    try:
        page = int(page)
    except:
        return error_page(request, u"不存在的页码")

    current_page, previous_page, next_page, page_range, error, one_page = do_pages(messages, 5, page)
    if error:
        return error_page(request, u"不存在的页码")

    return render(request, "oj/account/user_index.html",
                  {"user": user, "blog_link": blog_link, "messages": current_page,
                   "previous_page": previous_page, "next_page": next_page,
                   "page_range": page_range, "one_page": one_page})
Example #2
0
def discussion_page(request, problem_id):
    """
    题目讨论区
    """
    try:
        problem = Problem.objects.get(id=problem_id, visible=True)
    except Problem.DoesNotExist:
        return error_page(request, u"题目不存在")
    problem_discussion_list = ProblemDiscussion.objects.filter(
        problem=problem).order_by("-created_time")

    page = request.GET.get('page', 1)
    try:
        page = int(page)
    except:
        return error_page(request, u"不存在的页码")

    current_page, previous_page, next_page, page_range, error, one_page = do_pages(
        problem_discussion_list, 10, page)
    if error:
        return error_page(request, u"不存在的页码")

    return render(
        request, "oj/problem/problem_discussion_list.html", {
            "problem_discussion_list": current_page,
            "problem": problem,
            "previous_page": previous_page,
            "next_page": next_page,
            "page_range": page_range,
            "one_page": one_page
        })
Example #3
0
def problem_list_page(request, page=1):
    """
    前台的问题列表
    """
    # 正常情况
    problems = Problem.objects.filter(visible=True)

    # 搜索的情况
    keyword = request.GET.get("keyword", "").strip()
    if keyword:
        problems = problems.filter(
            Q(title__contains=keyword) | Q(description__contains=keyword))

    difficulty_order = request.GET.get("order_by", None)
    if difficulty_order:
        if difficulty_order[0] == "-":
            problems = problems.order_by("-difficulty")
            difficulty_order = "difficulty"
        else:
            problems = problems.order_by("difficulty")
            difficulty_order = "-difficulty"
    else:
        difficulty_order = "difficulty"

    # 按照标签筛选
    tag_text = request.GET.get("tag", None)
    if tag_text:
        try:
            tag = ProblemTag.objects.get(name=tag_text)
        except ProblemTag.DoesNotExist:
            return error_page(request, u"标签不存在")
        problems = tag.problem_set.all().filter(visible=True)

    try:
        page = int(page)
    except:
        return error_page(request, u"不存在的页码")

    current_page, previous_page, next_page, page_range, error, one_page = do_pages(
        problems, 40, page)
    if error:
        return error_page(request, u"不存在的页码")

    # 右侧标签列表 按照关联的题目的数量排序 排除题目数量为0的
    tags = ProblemTag.objects.annotate(problem_number=Count("problem")).filter(
        problem_number__gt=0).order_by("-problem_number")

    return render(
        request, "oj/problem/problem_list.html", {
            "problems": current_page,
            "page": int(page),
            "previous_page": previous_page,
            "next_page": next_page,
            "keyword": keyword,
            "tag": tag_text,
            "tags": tags,
            "difficulty_order": difficulty_order,
            "page_range": page_range,
            "one_page": one_page
        })
Example #4
0
def user_rank_page(request, page=1):
    ranks = UserProfile.objects.filter(submission_number__gt=0).order_by("-accepted_problem_number",
                                                                         "submission_number")

    try:
        page = int(page)
    except:
        return error_page(request, u"不存在的页码")
    current_page, previous_page, next_page, page_range, error, one_page = do_pages(ranks, 20, page)
    if error:
        return error_page(request, u"不存在的页码")

    return render(request, "utils/rank.html", {"ranks": current_page, "page": page,
                                               "previous_page": previous_page,
                                               "next_page": next_page,
                                               "start_id": int(page) * 20 - 20,
                                               "page_range": page_range, "one_page": one_page})
Example #5
0
def contest_list_page(request, page=1):
    """
    所有比赛的列表页
    """
    # 正常情况
    contests = Contest.objects.filter(visible=True).order_by("-create_time")

    # 搜索的情况
    keyword = request.GET.get("keyword", "").strip()
    if keyword:
        contests = contests.filter(
            Q(title__contains=keyword) | Q(description__contains=keyword))

    # 筛选我能参加的比赛
    join = request.GET.get("join", None)
    if request.user.is_authenticated() and join:
        contests = contests.filter(Q(contest_type__in=[1, 2]) | Q(groups__in=request.user.group_set.all())). \
            filter(end_time__gt=datetime.datetime.now(), start_time__lt=datetime.datetime.now())

    try:
        page = int(page)
    except:
        return error_page(request, u"不存在的页码")

    current_page, previous_page, next_page, page_range, error, one_page = do_pages(
        contests, 10, page)
    if error:
        return error_page(request, u"不存在的页码")

    return render(
        request, "oj/contest/contest_list.html", {
            "contests": current_page,
            "page": int(page),
            "previous_page": previous_page,
            "next_page": next_page,
            "keyword": keyword,
            "join": join,
            "page_range": page_range,
            "one_page": one_page,
            "start_id": page * 10 - 10
        })
Example #6
0
def submission_list_page(request, page=1):
    """
    所有提交的列表页
    """

    submission_filter = {"my": None, "user_id": None}
    # 是否显示所有人的提交
    show_all = True

    # url中如果存在user_id参数,说明只显示这个人的提交,忽略其他参数
    user_id = request.GET.get("user_id", None)
    if user_id and request.user.admin_type == SUPER_ADMIN:
        submission_filter["user_id"] = user_id
        submissions = Submission.objects.filter(user_id=user_id,
                                                contest_id__isnull=True)
    else:
        try:
            show_all = settings.SHOW_ALL_SUBMISSIONS_LIST
        except Exception:
            pass

        # url中my=true可以只显示自己的
        if request.GET.get("my", None) == "true":
            submission_filter["my"] = "true"
            show_all = False
        if show_all:
            submissions = Submission.objects.filter(contest_id__isnull=True)
        else:
            submissions = Submission.objects.filter(user_id=request.user.id,
                                                    contest_id__isnull=True)

    submissions = submissions.values("id", "user_id", "problem_id", "result",
                                     "create_time", "accepted_answer_time",
                                     "language").order_by("-create_time")

    language = request.GET.get("language", None)
    if language:
        submissions = submissions.filter(language=int(language))
        submission_filter["language"] = language

    result = request.GET.get("result", None)
    if result:
        submissions = submissions.filter(result=int(result))
        submission_filter["result"] = result

    try:
        page = int(page)
    except:
        return error_page(request, u"不存在的页码")

    submissions, previous_page, next_page, page_range, error, one_page = do_pages(
        submissions, 20, page)
    if error:
        return error_page(request, u"不存在的页码")

    # 因为提交页面经常会有重复的题目和用户,缓存一下查询结果
    cache_result = {"problem": {}, "user": {}}
    for item in submissions:
        problem_id = item["problem_id"]
        if problem_id not in cache_result["problem"]:
            problem = Problem.objects.get(id=problem_id)
            cache_result["problem"][problem_id] = problem.title
        item["title"] = cache_result["problem"][problem_id]

        user_id = item["user_id"]
        if user_id not in cache_result["user"]:
            user = User.objects.get(id=user_id)
            cache_result["user"][user_id] = user
        item["user"] = cache_result["user"][user_id]

        if item["user_id"] == request.user.id or request.user.admin_type == SUPER_ADMIN:
            item["show_link"] = True
        else:
            item["show_link"] = False

    return render(
        request, "oj/submission/submissions_list.html", {
            "submissions": submissions,
            "page": int(page),
            "previous_page": previous_page,
            "next_page": next_page,
            "start_id": int(page) * 20 - 20,
            "query": build_query_string(submission_filter),
            "submission_filter": submission_filter,
            "show_all": show_all,
            "page_range": page_range,
            "one_page": one_page
        })
Example #7
0
def group_list_page(request, page=1):
    groups = Group.objects.filter(visible=True, join_group_setting__lte=2)

    # 搜索的情况
    keyword = request.GET.get("keyword", None)
    if keyword:
        groups = groups.filter(
            Q(name__contains=keyword) | Q(description__contains=keyword))
    join = request.GET.get("join", None)
    if join:
        groups = groups.filter(join_group_setting=int(join))

    # 写的巨臭的状态筛选,等待更新
    for group in groups:
        try:
            AdminGroupRelation.objects.get(group=group, user=request.user)
            group.is_joined = 2
        except:
            try:
                UserGroupRelation.objects.get(group=group, user=request.user)
                group.is_joined = 1
            except:
                if JoinGroupRequest.objects.filter(group=group,
                                                   user=request.user):
                    group.is_joined = 3
                else:
                    group.is_joined = 0

    status = request.GET.get('status', None)
    if status:
        for group in groups:
            if group.is_joined != int(status) - 1:
                groups = groups.exclude(pk=group.id)

    for group in groups:
        try:
            AdminGroupRelation.objects.get(group=group, user=request.user)
            group.is_joined = 2
        except:
            try:
                UserGroupRelation.objects.get(group=group, user=request.user)
                group.is_joined = 1
            except:
                if JoinGroupRequest.objects.filter(group=group,
                                                   user=request.user):
                    group.is_joined = 3
                else:
                    group.is_joined = 0
    # end 等待更新

    try:
        page = int(page)
    except:
        return error_page(request, u"不存在的页码")

    current_page, previous_page, next_page, page_range, error, one_page = do_pages(
        groups, 20, page)
    if error:
        return error_page(request, u"不存在的页码")

    return render(
        request, "oj/group/group_list.html", {
            "groups": current_page,
            "contests": current_page,
            "page": int(page),
            "previous_page": previous_page,
            "next_page": next_page,
            "keyword": keyword,
            "page_range": page_range,
            "one_page": one_page,
            "join": join,
            "status": status
        })