Задание на стажировку от JetBrains по направлению "Создание системы для перевода текстов на платформе Stepik".
Приложение написано на Python 3.
Необходимые библиотеки перечислены в requirements.txt
. Их можно установить с помощью команды:
pip install -r requirements.txt
Приложение использует Memcached для кэширования результатов. Установить его можно скачав с официального сайта.
Все настройки производятся в файле stepiktask/settings.py
.
Важно Обязательно замените ключ в SECRET_KEY
на длинную случайную (не псевдо) строку.
При размещении приложения на стороннем хосте, добавьте его в ALLOWED_HOSTS
.
Поскольку в проекте БД не используется, были оставлены настройки по умолчанию для SQLite3.
Перед первым запуском примените миграции:
python manage.py migrate
Секцию администратора и debug mode можно настроить соответственно переменными ADMIN_AVAILABLE
и DEBUG
.
Адрес, порт и время сохранения кэш-записи в Memcached можно изменить в переменной CACHES
:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'address:port',
'TIMEOUT': 5 * 60, # in seconds
}
}
Сначала запустите Memcached:
memcached
Далее запустите тестовый сервер (в production следует использовать настоящий сервер, например, Gunicorn):
python manage.py runserver
Важно Перед запуском тестов запустите Memcached, иначе тест на кеширование не будет проходить.
Для запуска тестов необходимо выполнить:
python manage.py test
К приложению приложен простой скрипт для генерации запросов к API loadtest.py
:
usage: loadtest.py [-h] [-requests REQUESTS]
optional arguments:
-h, --help show this help message and exit
-requests REQUESTS Number of requests to generate
Для нагрузочного тестирования советуем использовать vegeta.
Тогда для проведения теста на нагрузку необходимо выполнить:
python loadtest.py -requests <requests count> | vegeta attack -lazy | vegeta report
step_type
- тип шага для фильтрации. Поддерживается толькоtext
, для остальных будет возвращена ошибкаlesson_id
- id урока. Если он не валиден (не существует или не является числом), будет вовзвращена ошибка
JSON объект с полями:
status
- "error" в случае ошибки, "success" иначеmessage
- описание дляstatus
ids
- массив id отфильтрованных шагов. Всегда пустой в случае ошибки