LPOJ 开发教程(六)数据库设计一

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

视图 访问路由
OJMessageView http://localhost:8000/ojmessage/
BlogView http://localhost:8000/blog/

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

视图 访问路由
SettingBoardView http://localhost:8000/settingboard/
BoardView http://localhost:8000/board/
DailyBoardView http://localhost:8000/dailyboard/
TeamBoardView http://localhost:8000/teamboard/
DailyContestBoardView http://localhost:8000/dailycontestboard/

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

视图 访问路由
ContestAnnouncementView http://localhost:8000/contestannouncement/
ContestTutorialView http://localhost:8000/contesttutorial/
ContestBoardView http://localhost:8000/settingboard/
ContestCommentView http://localhost:8000/contestcomment/
ContestInfoView http://localhost:8000/contestinfo/
ContestComingInfoView http://localhost:8000/contestcominginfo/
ContestProblemView http://localhost:8000/contestproblem/
ContestRegisterView http://localhost:8000/contestregister/
ContestRatingChangeView http://localhost:8000/contestratingchange/
CurrentTimeView http://localhost:8000/currenttime/
发布了401 篇原创文章 · 获赞 61 · 访问量 15万+

猜你喜欢

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