LPOJ 开发教程(七)数据库设计二

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

视图 访问路由
JudgeStatusView http://localhost:8000/judgestatus/
JudgeStatusPutView http://localhost:8000/judgestatusput/
JudgeStatusCodeView http://localhost:8000/judgestatuscode/
CaseStatusView http://localhost:8000/casestatus/
RejudgeAPIView http://localhost:8000/rejudge/

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

视图 访问路由
ProblemView http://localhost:8000/problem/
ProblemDataView http://localhost:8000/problemdata/
ProblemTagView http://localhost:8000/problemtag/
UploadFileAPIView http://localhost:8000/uploadfile/
发布了401 篇原创文章 · 获赞 61 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/lzc504603913/article/details/90703157