获取代码
访问官方代码仓库:
GitHub - QingdaoU/OnlineJudge: Open source online judge based on Vue, Django and Docker. | 青岛大学开源 Online Judge | QQ群 496710125 | admin@qduoj.com
复制仓库的下载地址:
https://github.com/QingdaoU/OnlineJudge.git
下载到本地
打开 WSL Ubuntu,打开专门放这个 OJ 代码的文件夹,并进入这个文件夹:
将 OnlineJudge 代码仓库下载到本地(直接复制下面的命令):
git clone https://github.com/QingdaoU/OnlineJudge.git && cd OnlineJudge
慢慢等待下载到本地就可以了,不行的话多试几遍:
目录结构
.
├── Dockerfile Docker容器配置文件,定义了如何构建和运行应用的容器
├── LICENSE
├── README-CN.md
├── README.md
├── account 账户应用
│ ├── __init__.py
│ ├── decorators.py 装饰器函数,用于修改或扩展函数/方法的行为
│ ├── middleware.py 中间件
│ ├── migrations 数据库迁移文件,记录数据库结构变更(数字代表迁移的顺序)
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20170209_1028.py
│ │ ├── 0003_userprofile_total_score.py
│ │ ├── 0005_auto_20170830_1154.py
│ │ ├── 0006_user_session_keys.py
│ │ ├── 0008_auto_20171011_1214.py
│ │ ├── 0009_auto_20171125_1514.py
│ │ ├── 0010_auto_20180501_0436.py
│ │ ├── 0011_auto_20180501_0456.py
│ │ ├── 0012_userprofile_language.py
│ │ └── __init__.py
│ ├── models.py 数据模型,对应数据库中的表
│ ├── serializers.py 序列化器,用于转换模型实例到可传输的格式
│ ├── tasks.py 任务定义
│ ├── templates 模板文件,用于渲染HTML页面
│ │ └── reset_password_email.html
│ ├── tests.py 测试用例
│ ├── urls URL路由配置,定义URL到视图的映射
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ └── oj.py
│ └── views 视图函数和类,处理请求并返回响应
│ ├── __init__.py
│ ├── admin.py
│ └── oj.py
├── announcement 公告
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20171011_1214.py
│ │ ├── 0003_auto_20180501_0436.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ └── oj.py
│ └── views
│ ├── __init__.py
│ ├── admin.py
│ └── oj.py
├── conf
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20171011_1214.py
│ │ ├── 0003_judgeserver_is_disabled.py
│ │ ├── 0004_auto_20180501_0436.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ └── oj.py
│ └── views.py
├── contest 竞赛
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20170209_0845.py
│ │ ├── 0003_auto_20170217_0820.py
│ │ ├── 0004_auto_20170717_1324.py
│ │ ├── 0005_auto_20170823_0918.py
│ │ ├── 0006_auto_20171011_1214.py
│ │ ├── 0007_contestannouncement_visible.py
│ │ ├── 0008_contest_allowed_ip_ranges.py
│ │ ├── 0009_auto_20180501_0436.py
│ │ ├── 0010_auto_20190326_0201.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ └── oj.py
│ └── views
│ ├── __init__.py
│ ├── admin.py
│ └── oj.py
├── data 项目数据目录
│ ├── config 配置文件
│ ├── log 日志文件
│ ├── public 公共资源,如图片、图标等
│ │ ├── avatar
│ │ │ └── default.png
│ │ ├── upload
│ │ └── website
│ │ └── favicon.ico
│ ├── ssl SSL证书和密钥
│ └── test_case 测试用例数据
├── deploy 部署相关脚本和配置
│ ├── entrypoint.sh 容器的入口脚本
│ ├── health_check.py 健康检查脚本
│ ├── nginx Nginx配置目录
│ │ ├── api_proxy.conf
│ │ ├── https_redirect.conf
│ │ ├── locations.conf
│ │ └── nginx.conf
│ ├── requirements.txt Python依赖列表
│ ├── supervisord.conf Supervisor配置文件,管理服务进程
│ └── test_case_rsync 同步测试用例的Docker相关配置
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── rsyncd.conf
│ └── run.sh
├── docs
│ └── data.json
├── fps
│ ├── __init__.py
│ ├── fps.xml
│ └── parser.py
├── init_db.sh
├── judge 评测系统相关
│ ├── __init__.py
│ ├── dispatcher.py
│ ├── languages.py
│ └── tasks.py
├── manage.py Django管理脚本
├── oj
│ ├── __init__.py
│ ├── dev_settings.py
│ ├── production_settings.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── options 选项或设置应用
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20180501_0436.py
│ │ ├── 0003_migrate_languages_options.py
│ │ └── __init__.py
│ ├── models.py
│ ├── options.py
│ ├── tests.py
│ └── views.py
├── problem 题目应用
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_problem__id.py
│ │ ├── 0003_auto_20170217_0820.py
│ │ ├── 0004_auto_20170501_0637.py
│ │ ├── 0005_auto_20170815_1258.py
│ │ ├── 0006_auto_20170823_0918.py
│ │ ├── 0008_auto_20170923_1318.py
│ │ ├── 0009_auto_20171011_1214.py
│ │ ├── 0010_problem_spj_compile_ok.py
│ │ ├── 0011_fix_problem_ac_count.py
│ │ ├── 0012_auto_20180501_0436.py
│ │ ├── 0013_problem_io_mode.py
│ │ ├── 0014_problem_share_submission.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ └── oj.py
│ ├── utils.py
│ └── views
│ ├── __init__.py
│ ├── admin.py
│ └── oj.py
├── run_test.py
├── submission 代码提交应用
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20170509_1203.py
│ │ ├── 0005_submission_username.py
│ │ ├── 0006_auto_20170830_1154.py
│ │ ├── 0007_auto_20170923_1318.py
│ │ ├── 0008_submission_ip.py
│ │ ├── 0009_delete_user_output.py
│ │ ├── 0011_fix_submission_number.py
│ │ ├── 0012_auto_20180501_0436.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ └── oj.py
│ └── views
│ ├── __init__.py
│ ├── admin.py
│ └── oj.py
└── utils 工具和辅助功能目录
├── __init__.py
├── api API相关的工具和序列化器
│ ├── __init__.py
│ ├── _serializers.py
│ ├── api.py
│ └── tests.py
├── cache.py 缓存相关的工具
├── captcha 验证码相关
│ ├── Menlo.ttc
│ ├── __init__.py
│ ├── timesbi.ttf
│ └── views.py
├── constants.py 常量定义
├── management
│ ├── __init__.py
│ └── commands
│ ├── __init__.py
│ └── inituser.py
├── migrate_data.py
├── models.py
├── serializers.py
├── shortcuts.py
├── tasks.py
├── throttling.py
├── urls.py
├── views.py
└── xss_filter.py XSS过滤
打开后端项目
使用 PyCharm 打开项目
为了方便,我们使用 PyCharm 打开,首先打开资源管理器:
找到后端项目所在的位置,右键使用 PyCharm 打开:
创建虚拟环境
先打开命令行:
输入以下命令创建并使用虚拟环境:
python3 -m venv .venv && source .venv/bin/activate
解释器配置
两个选一个,一个不行就换一个。
安装依赖
pip3 install -r deploy/requirements.txt
等待安装完成即可。
更新一下重新安装就行了,比较慢的话可以实用 pip 镜像源:
pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
-i https://pypi.tuna.tsinghua.edu.cn/simple
数据库配置
查看数据库配置
打开 oj
目录,dev_settings.py
中有数据库的配置:
数据库名、用户、密码均是:
onlinejudge
端口是:
5435
数据库创建
打开宝塔面板,添加一个数据库:
数据库连接
切回 PyCharm:
初始化数据库
python3 manage.py migrate
但是有个问题:
创建一个 secret.key
,就可以执行了:
刷新数据库,就可以看见数据库已经建表了:
运行项目
输入:
python3 manage.py runserver
可以看见已经运行了,地址为:
http://127.0.0.1:8000/
将这个地址放到前端工程里,就可以了
export TARGET=http://127.0.0.1:8000/
与前端搭配成功: