mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 16:33:22 +00:00
c08ec7a2dc
monitor 不再使用,配置判题服务器的代码移入 judge_dispatcher 里面
添加前端后台判题服务器管理页面一些校验的功能
去掉判题服务器监控的前端和后端
修复比赛 first ac 显示错误的问题
修复两步验证中的错误
tfa 显示 url
增加 qrcode 依赖
完成两步验证的逻辑
fix error package name and add pip mirrorwq
废弃 huey,多数据库连接的时候存在 connection 无法释放的问题,回到 celery
修复 huey 队列不会释放数据库连接的问题,是用法不对
增加关闭两步验证的 api
增加两步验证基础代码
完善 sso 登录部分
规范配置文件写法;数据库用户名也在环境变量中取
个人博客链接前面也增加图标
修改判题机器的配置文件
删除不再使用的配置文件
Squash from a1fff74 to 12f96c6
by virusdefender
111 lines
3.0 KiB
Python
111 lines
3.0 KiB
Python
# coding=utf-8
|
||
import hashlib
|
||
import time
|
||
import random
|
||
import logging
|
||
|
||
from django.shortcuts import render
|
||
from django.core.paginator import Paginator
|
||
|
||
from rest_framework.response import Response
|
||
|
||
|
||
logger = logging.getLogger("app_info")
|
||
|
||
|
||
def error_page(request, error_reason):
|
||
return render(request, "utils/error.html", {"error": error_reason})
|
||
|
||
|
||
def error_response(error_reason):
|
||
return Response(data={"code": 1, "data": error_reason})
|
||
|
||
|
||
def serializer_invalid_response(serializer):
|
||
for k, v in serializer.errors.iteritems():
|
||
return error_response(k + " : " + v[0])
|
||
|
||
|
||
def success_response(data):
|
||
return Response(data={"code": 0, "data": data})
|
||
|
||
|
||
def paginate_data(request, query_set, object_serializer):
|
||
"""
|
||
用于分页的函数
|
||
如果 url 里面不含有paging=true,那么将返回全部数据。类似
|
||
[
|
||
{
|
||
"username": "1111111",
|
||
"password": "123456"
|
||
}
|
||
]
|
||
如果 url 中有 paging=true 的参数,
|
||
然后还需要读取其余的两个参数,page=[int],需要的页码,p
|
||
age_size=[int],一页的数据条数
|
||
|
||
:param query_set 数据库查询结果
|
||
:param object_serializer: 序列化单个object的serializer
|
||
"""
|
||
need_paginate = request.GET.get("paging", None)
|
||
# 如果请求的参数里面没有paging=true的话 就返回全部数据
|
||
if need_paginate != "true":
|
||
if object_serializer:
|
||
return object_serializer(query_set, many=True).data
|
||
else:
|
||
return query_set
|
||
|
||
page_size = request.GET.get("page_size", None)
|
||
if not page_size:
|
||
raise ValueError("Error parameter page_size")
|
||
|
||
try:
|
||
page_size = int(page_size)
|
||
except Exception:
|
||
raise ValueError("Error parameter page_size")
|
||
|
||
paginator = Paginator(query_set, page_size)
|
||
page = request.GET.get("page", None)
|
||
|
||
try:
|
||
current_page = paginator.page(page)
|
||
except Exception:
|
||
raise ValueError("Error parameter current_page")
|
||
if object_serializer:
|
||
results = object_serializer(current_page, many=True).data
|
||
else:
|
||
results = current_page
|
||
|
||
data = {"results": results,
|
||
"previous_page": None,
|
||
"next_page": None,
|
||
"page_size": page_size,
|
||
"current_page": page,
|
||
"count": paginator.count,
|
||
"total_page": paginator.num_pages}
|
||
|
||
try:
|
||
data["previous_page"] = current_page.previous_page_number()
|
||
except Exception:
|
||
pass
|
||
|
||
try:
|
||
data["next_page"] = current_page.next_page_number()
|
||
except Exception:
|
||
pass
|
||
|
||
return data
|
||
|
||
|
||
def paginate(request, query_set, object_serializer=None):
|
||
try:
|
||
data= paginate_data(request, query_set, object_serializer)
|
||
except Exception as e:
|
||
logger.error(str(e))
|
||
return error_response(u"参数错误")
|
||
return success_response(data)
|
||
|
||
|
||
def rand_str(length=32):
|
||
string = hashlib.md5(str(time.time()) + str(random.randrange(1, 987654321234567)) + str(random.randrange(1, 987654321234567))).hexdigest()
|
||
return string[0:length] |