LPOJ网址:www.lpoj.cn
LPOJ文档:docs.lpoj.cn
本节主要介绍提交信息与题目相关的数据库设计,实际上就是API的设计。
具体需要Django相关知识配合阅读。
Judgestatus
此模块主要用来实现提交信息相关的API
models.py
model |
功能 |
JudgeStatus |
提交判题的信息 |
CaseStatus |
每一个case的情况 |
JudgeStatus
属性 |
功能 |
类型 |
说明 |
user |
提交的用户 |
CharField |
|
oj |
提交的OJ |
CharField |
用于VJudge |
problem |
提交的题目 |
CharField |
|
result |
提交的结果 |
IntegerField |
具体内容查阅Judger文档 |
time |
时间占用 |
IntegerField |
|
memory |
内存占用 |
IntegerField |
|
length |
代码长度 |
IntegerField |
|
language |
提交语言 |
CharField |
|
submittime |
提交时间 |
DateTimeField |
auto_now |
judger |
判题的判题机 |
CharField |
|
contest |
该提交所属的比赛 |
IntegerField |
|
contestproblem |
该提交所属的比赛的题目 |
IntegerField |
|
code |
提交的代码 |
TextField |
|
testcase |
在哪个样例出错 |
CharField |
|
message |
额外信息 |
TextField |
保存编译错误信息,运行时错误信息等,同时也作为其他OJ的题目ID,用于VJudge |
problemtitle |
提交的标题 |
CharField |
|
rating |
用户留言时的Rating |
IntegerField |
用于实现前端改变颜色 |
CaseStatus
属性 |
功能 |
类型 |
说明 |
statusid |
所属的提交ID |
IntegerField |
|
username |
所属的用户 |
CharField |
|
problem |
所属的题目 |
CharField |
|
result |
该样例的判题结果 |
CharField |
|
time |
该样例所花时间 |
IntegerField |
|
memory |
该样例所花内存 |
IntegerField |
|
testcase |
样例名称 |
CharField |
|
casedata |
样例输入截取 |
CharField |
非比赛才能查看,Judger中控制 |
outputdata |
样例输出截取 |
CharField |
非比赛才能查看,Judger中控制 |
useroutput |
用户输出截取 |
CharField |
非比赛才能查看,Judger中控制 |
permission.py
permission |
读权限 |
写权限 |
ManagerOnly |
有 |
仅管理员 |
UserRatingOnly |
无 |
仅用户或为管理员,并且不能修改Rating |
NoContestOnly |
仅用户或比赛结束 |
有 |
serializers.py
serializers |
序列化字段 |
JudgeStatusSerializer |
不包括代码 |
JudgeStatusCodeSerializer |
ALL |
CaseStatusSerializer |
ALL |
views.py
视图 |
查询集合 |
可过滤字段 |
权限 |
可分页 |
可搜索 |
JudgeStatusView |
ID倒序 |
(‘user’, ‘result’, “contest”, “problem”, “language”) |
ManagerOnly |
是 |
否 |
JudgeStatusPutView |
仅用于提交代码 |
无 |
UserRatingOnly |
否 |
否 |
JudgeStatusCodeView |
ALL |
(‘user’, ‘result’, “contest”, “problem”) |
NoContestOnly |
是 |
否 |
CaseStatusView |
ALL |
(‘username’, ‘problem’, “statusid”) |
ManagerOnly |
是 |
否 |
RejudgeAPIView |
用于实现Rejudge |
无 |
ManagerOnly |
否 |
否 |
urls.py
Problem
此模块主要用来实现题目相关的API
models.py
model |
功能 |
Problem |
题目的详细信息 |
ProblemData |
题目的简要信息 |
ProblemTag |
题目的标签 |
Problem
属性 |
功能 |
类型 |
说明 |
problem |
题目编号 |
CharField |
primary_key |
author |
题目作者 |
CharField |
|
addtime |
题目添加时间 |
DateTimeField |
auto_now |
oj |
题目的OJ |
CharField |
Vjudge用,一般是LPOJ |
title |
题目的标题 |
CharField |
|
des |
题目的介绍 |
TextField |
支持网页格式 |
input |
输入介绍 |
TextField |
支持网页格式 |
output |
输出介绍 |
TextField |
支持网页格式 |
sinput |
样例输入 |
TextField |
多个样例间用|#)隔开 |
soutput |
样例输出 |
TextField |
多个样例间用|#)隔开 |
source |
题目来源 |
TextField |
如果是Vjudge,填的是OJ对应的题号 |
time |
题目限时 |
IntegerField |
|
memory |
题目内存限制 |
IntegerField |
|
hint |
提示 |
TextField |
支持网页格式 |
auth |
题目权限 |
IntegerField |
1公开 2私密 3 比赛中的题 |
ProblemData
属性 |
功能 |
类型 |
说明 |
problem |
题目编号 |
CharField |
primary_key |
title |
题目标题 |
CharField |
|
level |
题目难度 |
IntegerField |
1~5 |
submission |
题目提交数 |
IntegerField |
|
ac |
该类型的数量 |
IntegerField |
|
mle |
该类型的数量 |
IntegerField |
|
tle |
该类型的数量 |
IntegerField |
|
rte |
该类型的数量 |
IntegerField |
|
pe |
该类型的数量 |
IntegerField |
|
ce |
该类型的数量 |
IntegerField |
|
wa |
该类型的数量 |
IntegerField |
|
se |
该类型的数量 |
IntegerField |
|
tag |
题目标签 |
TextField |
中间用竖线隔开 |
score |
题目分数 |
IntegerField |
|
auth |
题目权限 |
IntegerField |
1公开 2私密 3 比赛中的题 |
oj |
题目所在OJ |
CharField |
|
ProblemTag
属性 |
功能 |
类型 |
说明 |
tagname |
标签名字 |
CharField |
unique |
count |
该标签的数量 |
IntegerField |
暂时弃用 |
permission.py
permission |
读权限 |
写权限 |
ManagerOnly |
有 |
仅管理员 |
AuthOnly |
仅比赛中或公开 |
仅管理员 |
serializers.py
serializers |
序列化字段 |
ProblemSerializer |
ALL |
ProblemDataSerializer |
ALL |
ProblemTagSerializer |
ALL |
views.py
视图 |
查询集合 |
可过滤字段 |
权限 |
可分页 |
可搜索 |
ProblemView |
仅单个查询 |
(‘auth’,) |
AuthOnly |
否 |
否 |
ProblemDataView |
ID倒序 |
(‘auth’,‘oj’,) |
ManagerOnly |
是 |
(‘tag’, ‘title’) |
ProblemTagView |
ALL |
无 |
ManagerOnly |
否 |
否 |
UploadFileAPIView |
用于上传测试数据 |
无 |
仅管理员 |
否 |
否 |
urls.py