Giter Site home page Giter Site logo

linzecong / lpoj Goto Github PK

View Code? Open in Web Editor NEW
229.0 5.0 63.0 9.19 MB

An open source online judge system base on Django REST framework and Vue.js !

Home Page: https://oj.lpoj.cn/

License: MIT License

CMake 0.04% Python 15.13% C 15.22% JavaScript 4.66% HTML 3.37% Vue 55.49% Dockerfile 0.21% Java 0.24% CSS 5.63%
online-judge django django-rest-framework vuejs element-ui acm docker travis-ci judge python

lpoj's Introduction

LPOJ

Python Django Rest Framework vue travis-ci Join-QQ-Group

一个基于Vue.js和Django的轻量级在线评测系统

目前应用于广东外语外贸大学

演示地址:oj.lpoj.cn

说明文档:docs.lpoj.cn

简述

  • 轻量级,易于部署和自定义定制
  • 前后端分离,提高服务器性能
  • 支持多机器多进程判题,判题更高效
  • 支持 C/C++/Java/Python2/Python3和Swift5.1语言
  • 支持 Special Judge和选择题判题
  • 丰富的API,开放的源代码
  • 一键保存和导出代码模板
  • 支持类似LeetCode的模板题判题功能
  • 新增班级管理与布置作业功能
  • 现代化的界面 + 手机适配
  • 实时爬取自定义用户的博客和其他OJ的做题数
  • 丰富的算法知识和体系化的套题训练

模块列表

使用Docker部署

环境准备

1. 安装必要的依赖

sudo apt-get update
sudo apt-get install -y git
sudo apt install docker.io -y
sudo apt install docker-compose -y

2. 开始安装

git clone https://github.com/Linzecong/LPOJ.git && cd LPOJ

请修改docker-compose.yml中的数据库密码(所有的 DB_PASSWORD,MYSQL_ROOT_PASSWORD 字段)和一些你认为必要的设置

请确保机器上 4406 8080 8000~8002 9906 端口没有被占用!

sudo docker-compose up -d --scale judger=3

以上命令默认开启3个判题机,可以自行修改数量

根据网速和配置情况,大约10到20分钟就可以自动搭建完成,全程无需人工干预。

等命令执行完成,然后运行 sudo docker ps -a 当看到所有的容器的状态均为 Up 就代表 OJ 已经启动成功。

3. 准备工作

  1. 安装成功后,先通过IP:8080访问OJ,注册一个用户

  2. 然后进入 IP:8000/admin 以用户名admin 密码admin 登录后台(请及时修改后台密码,这个后台作用仅用于修改管理员权限,因此没有样式)

  3. 修改User表中,你注册的超级用户的type为3,使得你注册的用户变为超级管理员

  4. 以管理员登录,右上角进入管理员页面,然后在网站设置标签,提交一次设置

4. 更新OJ

如要更新OJ只需在LPOJ目录下执行如下步骤

git pull # 如果你修改了代码,自行解决merge得到情况
sudo docker-compose stop
sudo docker-compose pull
sudo docker-compose up -d --scale judger=3

容器运行时产生的数据会保存在对应的文件夹中,如数据库文件,题目数据等

自定义OJ

首先先下载源代码

git clone https://github.com/Linzecong/LPOJ.git && cd LPOJ

然后随意修改你要修改的地方,修改完毕后,使用如下命令重新部署

sudo docker-compose -f docker-compose-build.yml up -d --build --scale judger=3

同样的,您需要修改docker-compose-build.yml中的配置,详见开始安装

由于会重新构建整个系统,而不是拉去已构建好的镜像,所以花的时间会比较长~请耐心等待

网站的静态文件可以放在 ./Frontend/dist/img中,比如存放题目所用的图片

如无意外,部署成功!

具体使用,请参阅使用文档

更新日志

3.3 更新类似LeetCode的模板题功能

3.4 更新班级管理和布置作业功能,可以在比赛中添加选择题

代办功能

  1. 封榜功能
  2. 更优秀的排行榜显示(现在人数多了会卡)

部分截图

image1

image2

image3

image4

image5

image6

或者你可以直接访问我们 oj.lpoj.cn

浏览器支持

Modern browsers(chrome, firefox)

特别感谢

许可

The MIT License

lpoj's People

Contributors

dependabot[bot] avatar dirtybat avatar linzecong avatar zscharlie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

lpoj's Issues

Problem描述页面BUG

在Problem 描述的页面,缩短网页显示宽度或者缩放网页的时候会造成正文显示不全

程序调用测试程序支持

leetcode有些题目是让你实现一些函数,然后后台判题是用另外一个代码去调用这个函数,从而产生一些输出,实现判题,请问下lpoj支持这个功能么

tag和problem对应关系

你好,我想请教一下有关tag和problem之间的关系,看代码似乎是相互独立的两个model,那么是怎么保证tag和problem的对应关系的呢?例如,我添加了一道题目中带有之前没有的tag,我怎么保证tag中也会对应添加上这个tag呢?是通过管理者自己维护嘛?有什么相对比较方便的方法吗?希望可以得到回到,谢谢!

算法考试bug

师兄你好,我今天在算法考试时发现选择题在时间还没开始时就可以看了,而且选择题在重新点进去后原来选的选项都乱了,希望能尽快修复怕影响考试成绩,谢谢大佬!

博客爬虫数据泄露用户真实姓名

在 Demo 爬到的博客数据里面,居然直接跟用户的真实姓名一同公布,这是不是泄露了用户隐私?页面上写的是 UserName ,而展示的数据却是人名。

无法注册

你好,我用这个代码build起来的docker service, 可以访问8080界面,但是无法注册(提示两次密码不一样,但是输入的是一样的). 另一个问题是无法打开8000/admin界面。

docker一键部署,不能成功OJ

请教一下,A+B problem,用下面这个代码,官方lpoj可以ac,但是我docker一键部署的不行(system error),没有OJ的经验,请问是我的代码有问题,还是我一键部署后添加的题目设置有问题,
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
for line in sys.stdin:
a = line.split()
print(int(a[0]) + int(a[1]))

500内部服务器错误,管理员

IP:8080正在开放,但
IP:8000 /管理员无法连接
IP:8081 / admin能够打开admin登录页面,但在admin登录后显示500个内部服务器错误

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.