LPOJ网址:www.lpoj.cn
LPOJ文档:docs.lpoj.cn
本节先介绍博客,排行榜与比赛相关的数据库设计,实际上就是API的设计。
具体需要Django相关知识配合阅读。
Blog
此模块主要用来实现博客相关的API
models.py
model |
功能 |
OJMessage |
留言板信息 |
Blog |
爬虫得到的博客条目 |
OJMessage
属性 |
功能 |
类型 |
说明 |
username |
留言用户 |
CharField |
|
msg |
留言内容 |
CharField |
|
time |
留言时间 |
DateField |
auto_now |
rating |
用户留言时的Rating |
IntegerField |
用于实现前端改变颜色 |
Blog
属性 |
功能 |
类型 |
说明 |
username |
博客所属用户 |
CharField |
|
title |
博客标题 |
CharField |
|
url |
博客地址 |
CharField |
|
summary |
博客的摘要 |
CharField |
|
time |
博客的爬取时间 |
CharField |
爬虫机器人直接保存时间字符串 |
permission.py
permission |
读权限 |
写权限 |
UserRatingOnly |
有 |
仅用户或为管理员,并且不能修改Rating |
ManagerOnly |
有 |
仅管理员 |
serializers.py
serializers |
序列化字段 |
OJMessageSerializer |
ALL |
BlogSerializer |
ALL |
views.py
视图 |
查询集合 |
可过滤字段 |
权限 |
可分页 |
可搜索 |
OJMessageView |
ID倒序 |
(‘username’, ‘time’) |
UserRatingOnly |
是 |
否 |
BlogView |
ID倒序 |
(‘username’, ‘time’) |
ManagerOnly |
是 |
否 |
urls.py
Board
此模块主要用来实现排行榜和设置相关的API
models.py
model |
功能 |
SettingBoard |
保存OJ的设置 |
Board |
用户爬虫需要的一些信息 |
DailyBoard |
用户每天的AC题目数统计 |
TeamBoard |
队伍Rating信息 |
DailyContestBoard |
队伍排位赛的一些信息,用于备份,作用不大 |
SettingBoard
属性 |
功能 |
类型 |
说明 |
schoolname |
学校名称 |
CharField |
用于显示在排行榜上的学校名字 |
ojname |
OJ名称 |
CharField |
OJ左上角的标题 |
Board
属性 |
功能 |
类型 |
说明 |
username |
用户名 |
CharField |
Primary_key |
classes |
班级 |
CharField |
|
number |
学号 |
CharField |
|
OJCount |
爬虫的OJ数 |
IntegerField |
无用的字段(历史遗留) |
OJ |
爬虫的OJ |
CharField |
爬虫机器人识别每个账号对应的OJ用,中间用竖线隔开 |
account |
爬虫的账号 |
CharField |
该用户OJ的账号名称,中间用竖线隔开,与OJ字段一一对应 |
acnum |
每个OJ的AC数 |
CharField |
中间用竖线隔开,与OJ字段一一对应 |
submitnum |
每个OJ的提交数 |
CharField |
中间用竖线隔开,与OJ字段一一对应 |
blogaddress |
爬虫用的博客地址 |
CharField |
用的是RSS地址 |
DailyBoard
属性 |
功能 |
类型 |
说明 |
username |
用户名 |
CharField |
|
account |
当天的总AC数量 |
IntegerField |
每天仅统计一次,用于生成表格 |
collecttime |
采集时间 |
DateField |
|
TeamBoard
属性 |
功能 |
类型 |
说明 |
teammember |
队伍名称 |
CharField |
|
score |
该队伍得分 |
IntegerField |
由爬虫模块计算并更新 |
collecttime |
采集时间 |
DateField |
|
DailyContestBoard
属性 |
功能 |
类型 |
说明 |
contestdate |
比赛日期 |
DateField |
|
teammember |
队伍名称 |
CharField |
|
problemcount |
题目数量 |
IntegerField |
|
wronglist |
错误的题目 |
CharField |
中间用竖线隔开,如 A|B |
wrongtime |
错误的次数 |
CharField |
与wronglist对应,如 1|2 |
aclist |
AC的题目 |
CharField |
中间用竖线隔开,如 A|B |
actime |
AC的时间 |
CharField |
与aclist对应,格式为00:00:00 |
permission.py
permission |
读权限 |
写权限 |
ManagerOnly |
有 |
仅管理员 |
serializers.py
serializers |
序列化字段 |
SettingBoardSerializer |
ALL |
BoardSerializer |
ALL |
DailyBoardSerializer |
ALL |
TeamBoardSerializer |
ALL |
DailyContestBoardSerializer |
ALL |
views.py
视图 |
查询集合 |
可过滤字段 |
权限 |
可分页 |
可搜索 |
SettingBoardView |
ALL |
无 |
ManagerOnly |
否 |
否 |
BoardView |
ALL |
(‘username’,) |
ManagerOnly |
是 |
否 |
DailyBoardView |
最近10天,正序 |
(‘username’, ‘collecttime’) |
ManagerOnly |
是 |
否 |
TeamBoardView |
ALL |
(‘teammember’, ‘collecttime’) |
ManagerOnly |
是 |
否 |
DailyContestBoardView |
ALL |
(‘contestdate’, ‘teammember’) |
ManagerOnly |
是 |
否 |
urls.py
Contest
此模块主要用来实现比赛相关的API
models.py
model |
功能 |
ContestInfo |
比赛的基本信息 |
ContestAnnouncement |
比赛中的通知 |
ContestProblem |
比赛包含的题目 |
ContestBoard |
比赛排行榜信息 |
ContestComment |
比赛提问 |
ContestTutorial |
比赛题解 |
ContestRegister |
比赛注册的用户 |
ContestRatingChange |
比赛的积分变化信息 |
ContestComingInfo |
各大OJ近期的比赛汇总,由爬虫机器人收集 |
ContestInfo
属性 |
功能 |
类型 |
说明 |
creator |
比赛举办者 |
CharField |
|
oj |
举办的OJ |
CharField |
一般都是LPOJ |
title |
比赛标题 |
CharField |
|
level |
比赛难度 |
IntegerField |
1~5 |
des |
比赛说明 |
CharField |
|
note |
比赛提示 |
CharField |
|
begintime |
比赛开始时间 |
DateTimeField |
|
lasttime |
比赛持续时间 |
IntegerField |
以秒为单位 |
type |
比赛类型 |
CharField |
ACM/Rated等等 |
auth |
比赛权限 |
IntegerField |
1 公开 2 私有 0 保护(需注册) |
clonefrom |
是否属于克隆 |
IntegerField |
非克隆的为-1,否则保存的是克隆的ID |
ContestAnnouncement
属性 |
功能 |
类型 |
说明 |
contestid |
比赛ID |
IntegerField |
|
announcement |
比赛提示信息 |
CharField |
|
ContestProblem
属性 |
功能 |
类型 |
说明 |
contestid |
比赛ID |
IntegerField |
|
problemid |
题目ID |
CharField |
|
problemtitle |
题目标题 |
CharField |
用于显示在比赛中的题目标题 |
rank |
题目顺序 |
IntegerField |
用数字表示本题目顺序 |
ContestBoard
属性 |
功能 |
类型 |
说明 |
contestid |
比赛ID |
IntegerField |
|
username |
该提交的用户名 |
CharField |
|
user |
该提交的用户昵称 |
CharField |
|
problemrank |
提交的题目序号ID |
IntegerField |
是题目顺序的编号 |
type |
该提交最终的结果 |
IntegerField |
1 AC, 0没AC算罚时,-1没AC不算罚时 |
submittime |
提交时间 |
BigIntegerField |
提交时间,以豪秒为单位 |
submitid |
该提交的ID |
IntegerField |
用于rejudge |
rating |
该提交用户的Rating |
IntegerField |
用于前端改变颜色 |
ContestComment
属性 |
功能 |
类型 |
说明 |
contestid |
比赛ID |
IntegerField |
|
user |
该提交的用户名 |
CharField |
|
title |
提问标题 |
CharField |
|
problem |
提问的题目 |
CharField |
|
message |
提问的信息 |
CharField |
|
huifu |
回复的信息 |
CharField |
default=“No respones” |
time |
提问的时间 |
DateTimeField |
auto_now |
rating |
该回复用户的Rating |
IntegerField |
用于前端改变颜色 |
ContestTutorial
属性 |
功能 |
类型 |
说明 |
contestid |
比赛ID |
IntegerField |
|
value |
题解内容 |
TextField |
支持MarkDown |
ContestRegister
属性 |
功能 |
类型 |
说明 |
contestid |
比赛ID |
IntegerField |
|
user |
注册的用户名 |
CharField |
|
rating |
该回复用户的Rating |
IntegerField |
用于前端改变颜色 |
ContestRatingChange
属性 |
功能 |
类型 |
说明 |
contestid |
比赛ID |
IntegerField |
|
contestname |
比赛标题 |
CharField |
|
contesttime |
比赛的时间 |
CharField |
|
user |
本次变化的用户名 |
CharField |
|
lastrating |
上次Rating |
IntegerField |
|
ratingchange |
Rating变化量 |
IntegerField |
|
currentrating |
当前Rating |
IntegerField |
|
ContestRatingChange
属性 |
功能 |
类型 |
说明 |
ojName |
比赛所在的OJ |
CharField |
|
link |
比赛链接 |
CharField |
|
startTime |
比赛开始时间 |
BigIntegerField |
毫秒为单位 |
endTime |
比赛结束时间 |
BigIntegerField |
毫秒为单位 |
contestName |
比赛名称 |
CharField |
|
permission.py
permission |
读权限 |
写权限 |
ManagerOnly |
有 |
仅管理员 |
UserRatingOnly |
有 |
仅用户(username)或为管理员,或为PUT |
UserRatingOnly2 |
有 |
仅用户(user)或为管理员,或为PUT |
serializers.py
serializers |
序列化字段 |
ContestAnnouncementSerializer |
ALL |
ContestTutorialSerializer |
ALL |
ContestBoardSerializer |
ALL |
ContestCommentSerializer |
ALL |
ContestInfoSerializer |
ALL |
ContestProblemSerializer |
ALL |
ContestRegisterSerializer |
ALL |
ContestRatingChangeSerializer |
ALL |
ContestComingInfoSerializer |
ALL |
views.py
视图 |
查询集合 |
可过滤字段 |
权限 |
可分页 |
可搜索 |
ContestAnnouncementView |
ALL |
(“contestid”,) |
ManagerOnly |
是 |
否 |
ContestTutorialView |
ALL |
(‘contestid’,) |
ManagerOnly |
是 |
否 |
ContestBoardView |
ALL |
(“contestid”,“username”,“problemrank”,“type”,) |
UserRatingOnly |
否 |
否 |
ContestCommentView |
ALL |
(“contestid”,“problem”,) |
UserRatingOnly2 |
是 |
否 |
ContestInfoView |
ID倒序 |
(“begintime”, “level”, “type”,“title”,) |
ManagerOnly |
是 |
(‘title’,) |
ContestComingInfoView |
开始时间正序 |
无 |
ManagerOnly |
是 |
否 |
ContestProblemView |
rank字段正序 |
(‘contestid’,) |
ManagerOnly |
是 |
否 |
ContestRegisterView |
ALL |
(‘user’, “contestid”) |
UserRatingOnly2 |
是 |
否 |
ContestRatingChangeView |
比赛时间倒序 |
(‘user’, “contestid”) |
ManagerOnly |
是 |
否 |
CurrentTimeView |
当前时间 |
无 |
无 |
否 |
否 |
urls.py