Mi5aka / stepik_test_project

Test project with Django and Vue.js (frontend is not ready)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Настройки проекта

Vue.js

npm install copy-webpack-plugin pug axios vue-axios vue-router vue-codemirror
vue-sse vuex --save-dev

npm run dev

Celery

celery -A code_training worker -l INFO

Generate message files for a desired language

python manage.py makemessages -l ru

After adding translations to the .po files, compile the messages

python manage.py compilemessages

Описание задания

Приложение должно позволять пользователю решать задачу на код на Python. Проверка задач осуществляется сторонним сервисом.

Frontend

Приложение состоит из одной страницы, на которой находится:

  • блок с описанием задачи "Напишите метод суммирующий два числа a и b"
  • редактор кода (желательно добавить подсветку кода, например https ://codemirror.net/)
  • кнопка “Отправить”

Пользователь вводит в редактор кода решение задачи и нажимает кнопку “Отправить”.

Фронтенд делает POST запрос к API-приложения с текстом решения задачи в ответ получает статус решения и идентификатор решения (id). Затем с какой-то периодичностью запрашивает статус решения по id. Подумать о том чтобы фронтенд не создавал большой нагрузки на бекенд и не задедосил его.

На время проверки кнопка “Отправить” должна быть заблокирована, редактор кода не должен допускать редактирования, а пользователю показан любой простой лоадер.

После завершения проверки нужно отобразить статус проверки решения (верно/неверно).

Пользователь может отредактировать решение и отправить его на проверку ещё раз.

Если пользователь перезагрузит страницу, фронтенд должен загрузить последнее отправленное решение. И отображать его в соответствие с его статусом.

Backend (Django, Celery)

Бекенд должен предоставлять АПИ для:

  • Отправки решения на проверку
  • Запроса списка решений
  • Запроса решение по id
  • Может что-то ещё, если это нужно фронтенду

При получение запроса на проверку решения от клиента бекенд асинхронно запускает проверку решения и как можно быстрее завершает запрос, возвращая в теле ответа текущий статус решения и id решения.

Каждое отправленное решение задачи нужно сохранять в базе данных, время начала его отправки и статус: evaluation (решение проверяется), correct (решение верное) или wrong (решение неверное). Каждый запрос на проверку решения считается новым решением, даже если текст не изменился.

Проверка задания происходит в стороннем сервисе и может занимать продолжительное время.

Админка

Добавить стандартную Джанго-админку. В ней должна быть возможность просматривать список решений. Решения в админке можно только просматривать, нельзя изменять, удалять или добавлять. Нужно иметь возможность фильтровать решения по дате создания и по статусу.

Сторонний сервис проверки решения

Сторонний сервис принимает решение в ответ возвращает свой внутренний идентификатор и статус. Ниже дана симуляция стороннего сервиса. Используйте её.

import random
import time
from typing import Tuple


def post_submission(reply: str) -> Tuple[int, str]:
    id = int(time.time() * 1000)
    status = random.choice([*['evaluation'] * 10, 'correct', 'wrong'])

    return id, status


def get_submission(id: int) -> Tuple[int, str]:
    status = random.choice([*['evaluation'] * 10, 'correct', 'wrong'])

    return id, status

Нужно стараться как можно меньше нагружать сторонний сервис, но в то же время пользователь должен как можно быстрее узнать о результате проверки.

About

Test project with Django and Vue.js (frontend is not ready)


Languages

Language:JavaScript 60.4%Language:Python 35.8%Language:Vue 2.9%Language:HTML 0.9%