用于算法竞赛的评测系统。
此仓库为API服务器,可能需要配合以下两个项目使用
- https://github.com/Officeyutong/HelloJudge3-WebApp (前端WebApp)
- https://github.com/Officeyutong/HelloJudge3-Judger (评测客户端)
http://yt2soj.top/ YT2SOJ
Web端和评测端。 Web端采取前后端分离,客户端渲染,后端只提供API接口。
评测采用Celery+Redis作为消息队列,评测端通过消息队列获取评测任务,并通过HTTP上报评测结果。
在项目根目录下,直接执行git pull
进行更新。
从2019.11.2开始,所有更新不再需要手动修改数据库。
每次更新后执行python3 manage.py db upgrade
即可。
- Python3.7或者以上版本
- MySQL
- Redis
- git
git clone https://gitee.com/yutong_java/HelloJudge2
,下载本项目至本地- 使用pip安装requirements.txt中的依赖包(
pip3 install -r requirements.txt
)。 - 将
config.sample.py
重命名为config.py
- 修改config.py
- 初始化数据库,参考下文
- 直接使用
python3.7 run.py
启动或者部署到uWSGI上运行。
- 运行
python3.7 manage.py db upgrade
见config.sample.py
。
用来加密session的密钥,在第一次运行OJ之前,请填写一个随机滚键盘生成的字符串。
数据库URI,如果使用SQLite请填写为sqlite:///data.db
,其中data.db
为数据库文件名。
如果使用MySQL,请填写为mysql+mysqlconnector://username:password@host:port/database_name
。
Flask的调试模式
站点名称。
用于在前端加密密码的salt,请脸滚键盘生成一个字符串。
在OJ开始运行后请不要更改,否则所有数据库中的密码都会失效。
新建用户的用户名必须满足这个正则表达式
Redis的地址(用于评测队列)
Redis的地址(用于缓存)
Redis 的地址(用于远程评测队列)
如果不想在同一个评测机实例上同时进行远程评测和本地评测,请务必保证此项不与REDIS_URI相同。
Web端认可的评测机列表。
每一个评测机都应该有一个唯一的UUID,Web端有这个评测机的UUID时,评测机才可以接到Web端发出的评测任务。
{
"一个评测机的UUID":"这个评测机在前端显示的名字"
}
每页显示的题目数量。
每页显示的提交记录数量。
每页显示的讨论数量。
每页显示的评论数量。
编译程序的时间上限(ms)。
发送给前端的编译结果的大小上限(bytes)
SPJ的执行时间上限(ms)
其他配置说明见config_default.py
如何添加语言请参考下文。
直接运行python3.7 run.py
即可。
在langs中新建语言ID.py
,其中需要有以下七个字符串常量。
常量名 | 意义 | 例 |
---|---|---|
SOURCE_FILE | 源文件名(包括后缀) | {filename}.cpp,{filename}.java等 |
OUTPUT_FILE | 目标文件名(包括后缀) | {filename}.out,{filename}.class |
COMPILE | 编译命令行 | 使用{source}表示源文件,{output}表示目标文件 |
RUN | 运行命令行 | |
DISPLAY | 语言显示名 | C++ 17 |
VERSION | 版本 | G++ 8.3 |
ACE_MODE | 用于ACE.js的代码样式,见static/ace/mode-xxx.js | c_cpp |
评测端部署指南见https://gitee.com/yutong_java/HelloJudge2-Judger
使用manage.py进行部分权限管理(用户添加\删除权限,设置管理员). 2020.1.23更新: 已支持在Web端进行用户权限管理
- setadmin 用户ID - 设置管理员 (将用户移动到admin组并添加permission.manage权限,然后刷新缓存)
- addperm 用户ID 权限字符串 - 用户添加权限(会刷新缓存)
- removeperm 用户ID 权限字符串 - 用户删除权限(会刷新缓存)
309 text files.
284 unique files.
167 files ignored.
github.com/AlDanial/cloc v 1.74 T=11.70 s (12.5 files/s, 1455.6 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
HTML 37 278 39 6691
Python 96 793 2067 6296
Markdown 3 142 0 504
C++ 4 10 3 105
INI 2 11 0 42
Mako 2 14 0 36
JSON 1 0 0 3
C/C++ Header 1 0 0 1
-------------------------------------------------------------------------------
SUM: 146 1248 2109 13678
-------------------------------------------------------------------------------
- 新的统一上传文件API
如果您觉得此项目对您有帮助,欢迎通过以下方式对作者进行捐助。
如果您在捐助时注明了您的姓名,那么您将会出现在下面的列表上。
- 2019.10.20 黑白棋子 微信 0.01
- 2019.10.20 Crystal 微信 5.20
- 2020.1.28 Johnson 支付宝 23.33