Для запуска проекта рекомендуется использовать операционную система Linux
и связку poetry
+ pyenv
python
- 3.6.6
Django
- 2.2.10
Версии зависимостей проекта можно посмотреть в файле pyproject.toml, который находится в корне проекта .
Для настройки окружения необходимо прописать следющие команды:
pyenv install 3.6.6 (если не установлена данная версия)
pyenv local 3.6.6
pip install poetry (если в версии не установлен poetry)
poetry install
Для запуска проекта неоходимо перейти в директорию /poll_manager
и выполнить следующие команды :
poetry run python manage.py migrate
poetry run python manage.py runserver 5000
если не устанавливать порт, автоматически проставиться 8000-й порт, в тестовых запросах, которые находится в tests_folder/test_req.py
, использовался порт 5000 .
Админ
:
- авторизация в системе;
- добавление / изменение / удаление опросов.
Атрибуты опроса:
(название, дата старта. дата окончания, описание.)
После создания поле "дата старта" у опроса нельзя менять:
(дабвление \ изменение \ удаление вопросов в опросе)
Атрибуты вопросов:
текст вопроса. тип вопроса ответ с текстом,
с выбором одного варианта,
с выбором нескольких вариантов
Пользователь
:
- Получение списка активных опросов;
- Прохождение опроса: опросы можно проходить анонимно,
в качестве идентификатора пользователя в API передаётся;
числовой ID, по которому сохраняются ответы пользователя на вопросы, любой пользователь можнт учавствовать в любом количестве вопросов ; - Получение пройденных пользователем опросов с детализацей по ответам (что выбрано) по ID уникальному пользователя;
Авторизация в админ панели через веб интерфейс.
Данные для входа:
login - smapl
password - P@ssw0rd1234
Создание опросов и вопросов к ним происходит там же.
Логика опросов следующая, изначально в модели Questions
создаются вопросы и варианты ответа к ним (варианты ответов прописываются через точку с запятой, в серверной части это все сплититься), далее при создании опроса в категории questions_ids
проставляются id вопросов. Тем самым когда пользователь запрашивет все активные опросы (по адресу api/active_polls
), он получает опросы у которых проставлен статус active
и из предложенного списка выбирает id опроса, который он хочет пройти.
Пример получения списка активных опросов :
get_all_active_polls = {"filter": {"status": "active"}}
resp = requests.get("http://127.0.0.1:5000/api/active_polls", json=get_all_active_polls)
Имея id запроса пользователь может запросить конкретный опрос, который он хочет пройти (по адресу api/get_poll
).
Пример получения определенного опроса по id опроса:
get_poll_by_id = {"filter": {"id": "2"}}
resp = requests.get("http://127.0.0.1:5000/api/get_poll", json=get_poll_by_id)
Отправка запроса происходит по адресу (api/send_poll_answer
).
Пример отправки ответов пользователем:
json_to_post = {"poll_id": "2", "user_id": "100453", "answers": "1;4"}
resp = requests.post("http://127.0.0.1:5000/api/send_poll_answer", data=json_to_post)
Получение всех опросов, которые прошел пользователь с конкретикой по опросу и его ответам получается по адреcу (api/get_passed_polls
) . Для получения списка пройденных опросов необходимо иметь id пользователя.
Пример получения всех пройденных опросов:
get_passed_polls = {"filter": {"user_id": 2940243}}
resp = requests.get("http://127.0.0.1:5000/api/get_passed_polls", json=get_passed_polls)
Не была реализована блокировка редактирования/удаления/добавления данных в опрос после проставки даты старта опроса
10.01.2021
18:00 - создание репозитория и начало работы над проектом.
21:30 - реализованы весь функционал проекта.
21:30 - 22.00 - тестирование кода .
22.00 - рефакторинг кода и написание документации