Skip to content
/ PollsAPI Public

API для системы опроса пользователей. Есть как администраторское api, так и пользовательское

Notifications You must be signed in to change notification settings

D10/PollsAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

PollsAPI

API для системы опроса пользователей. Есть как администраторское api, так и пользовательское. Со стороны администратора реализованы просмотр/добавление/редактирование/удаление всех опросов и вопросов в базе, со стороны пользователя реализован просмотр списка опросов, их прохождения и получения детализации по ответам на пройденые опросы.

Развертка проекта в docker

В папке проекта имеются 2 файла с базовыми настройками docker - Dockerfile и docker-compose, просмотрим эти файлы

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt

Здесь мы указываем образ python3, устанавливаем переменную окружения, рабочую директорию контейнера, копирование всех фалов проекта в нее и установку библиотек из requirements.txt

docker-compose.yml

version: '3.8'
services:
   web:
       build: .
       command: python manage.py runserver localhost:8000
       ports:
           - '8000:8000'

В этом файле мы указываем версию docker-compose, команду по запуску локального django сервера и порты, которые будет слушать docker

После того, как файлы с первичными настройками были созданы, соберем и запускаем наш контейнер:

docker-compose build
docker-compose up

Для проверки правильности настройки и запуска откроем браузер и в адресную строку напишем http://localhost:8000

image

Как видим, локальный сервер работает, django пытается найти страницу по этой ссылке, но т.к у нас нет такого url, он отдает 404 ошибку

Инструкция по использованию api

api нашего проекта будет находиться по адресу http://localhost:8000/api/{something}, в этой ссылке мы будем указывать необходимые для нас параметры

Авторизация администратора

Для использования функций администратора пользователю необходимо передавать в head запроса токен доступа, который он может получить после авторизации на сайте

Запрос Значение
POST auth/token/login Принимает в тело запроса параметры username -никнейм админа и password пароль. В качестве ответа отдает токен в формате {'token': 'some_token'}
POST auth/token/logout Выход из системы, также принимает в тело запроса username и password, удаляет полученный в ходе авторизации токен из системы, что делает его недействительным для дальнейшего использования

Опросы

Функции администратора

На сайте есть Опросы, у каждого опроса есть свой уникальный id, название (title), описание (description), дата старта опроса (date_start) и дата его окончания рассмотрим набор функций администратора, в каждую из функций необходимо передавать в head запроса уникальный токен доступа, который администратор получает в ходе авторизации

Внутри каждого опроса есть вопросы, у каждого вопроса есть уникальный id, связанный с ним опрос (poll), текст вопроса (text), тип вопроса (type) бывает 3-х типов - ответ текстом ('text'), выбор одного варианта ответа ('variation'), выбор одного или нескольких вариантов ответа ('variations'), варианты ответа (variations) (поле может быть пустым в случае, если тип вопроса - ответ текстом)

Запрос Значение
GET api/polls Отдаст все активные опросы в формате [{'id': 'ID опроса', 'title': 'Название опроса', 'description': 'Описание', 'date_start': 'Дата начала', 'date_end': Дата окончания'}, ...]
POST api/polls/ Создает новый опрос, необходимо передавать в тело запроса все поля модели опроса (title, description, date_start, date_end)
GET api/polls/{poll_id} Выдает детальную информацию об опросе, с содержащимии его вопросами и их вариантами ответов. Пример: {'id': 'ID опроса', 'title': 'Название опроса', 'description': 'Описание', 'date_start': 'Дата начала', 'date_end': Дата окончания', 'questions': [{'id': 'ID вопроса'. 'poll': 'title связанного опроса', 'text': 'текст вопроса', 'type': 'Тип вопроса', 'variations': ['Варианты ответа на вопрос (если есть)', ...]}]}
PATCH api/polls/{poll_id}/ Позволяет редактировать поля выбранного опроса, для этого в тело запроса необходимо передать поле, которое необходимо отредактировать и его новое значение. Пример: {'title': 'New title', 'date_end': '2021-09-30'}
DELETE api/polls/{poll_id}/ Удаляет выбранный опрос из базы, все вопросы данного опроса будут также удалены

Функции администратора для модели вопросов

Запрос Значение
GET api/questions Отдает список всех вопросов в формате [{'id': 'ID вопроса'. 'poll': 'title связанного опроса', 'text': 'текст вопроса', 'type': 'Тип вопроса', 'variations': ['Варианты ответа на вопрос (если есть)', ...]}]
POST api/questions/ Создает новый вопрос, необходимо передавать в тело запроса следующие параметры - {'poll': 'Название опроса', 'text': 'Текст вопроса', 'type': 'Тип вопроса (какие бывают типы см.выше)', 'variations': ['Текст вариантов ответа, если их несколько - необходимо передавать их через запятую с пробелом']}
GET api/questions/{question_id} Отдает информацию об одном конкретном вопросе в вышеуказанном формате
PATCH api/questions/{question_id}/ Позволяет редактировать поля выбранного вопроса, для этого в тело запроса необходимо передать поле, которое необходимо отредактировать и его новое значение. Пример: {'text': 'New text', 'type': 'variations'}
DELETE api/question/{question_id}/ Удаляет выбранный вопрос из базы

Функционал пользователя

Запрос Значение
GET api/polls Отдаст все активные опросы в формате [{'id': 'ID опроса', 'title': 'Название опроса', 'description': 'Описание', 'date_start': 'Дата начала', 'date_end': Дата окончания'}, ...]
GET api/polls/{poll_id} Выдает детальную информацию об опросе, с содержащимии его вопросами и их вариантами ответов. Пример: {'id': 'ID опроса', 'title': 'Название опроса', 'description': 'Описание', 'date_start': 'Дата начала', 'date_end': Дата окончания', 'questions': [{'id': 'ID вопроса'. 'poll': 'title связанного опроса', 'text': 'текст вопроса', 'type': 'Тип вопроса', 'variations': ['Варианты ответа на вопрос (если есть)', ...]}]}
POST api/polls/{poll_id}/answer/ Прохождение выбранного опроса. Принимает в тело запроса уникальный user_id (Пример: {'user_id': 1}), к которому будут привязываться ответы пользователя. Отдает в качестве ответа, все вопросы из выбранного опроса, на которые пользователь еще не ответил
POST api/polls/{poll_id}/answer/{question_id}/ Принимает ответ на выбранный вопрос. Необходимо передвать в тело запроса user_id и ответ, ответ зависит от типа выбранного вопроса (про типы вопросов см.выше), варианты передаются в поле 'answers' а текст ответа в поле 'answer_text', Примеры: {'user_id': 1, 'answer_text' : 'Test text'}, {'user_id': 1, 'answers': 'Answer1'}, {'user_id': 1, 'answers': 'Answer1, Answer2, Answer3'}
POST api/my_answers/ Отдает детализацию по ответам на пройденые пользователем вопросы. Принимает в тело запроса user_id, по которому и идет выборка ответов. Отдает ответ типа: [{'id': 'ID опроса', 'title' 'Название опроса', 'answers': [{'id': 'ID ответа', 'question': 'Текст вопроса', 'answers': [{'Выбранные пользователем варианты ответа'}, ...], 'answers_text': 'Текст ответа на вопрос'}, ...]}, ...]

About

API для системы опроса пользователей. Есть как администраторское api, так и пользовательское

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published