OnlineJudge/utils/shortcuts.py
virusdefender c08ec7a2dc 修改 admin 界面,ip 太宽了
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
2015-12-23 00:33:08 +08:00

111 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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