Для исследования возможностей фреймворка Django 2.x, создано приложение «Опросы» со следующем функционалом:
- Администраторы могут создавать, а пользователи проходить опросы.
- Каждый опрос может быть опубликован или не опубликован.
- Опрос включает в себя один и более вопросов, порядок вопросов внутри опроса можно задавать и менять в админке.
- Каждый вопрос имеет два и более вариантов ответа, порядок вариантов можно задавать и менять в админке.
Пример структуры опроса:
Мобильные телефоны - опрос
-
Сколько вам лет? - вопрос 1
- <20 - вариант ответа 1.1
- 20-30 - вариант ответа 1.2
- >30 - вариант ответа 1.3
-
Кто производитель вашего телефона? - вопрос 2
- Apple - вариант ответа 2.1
- Samsung - вариант ответа 2.2
- Другой - вариант ответа 2.3
-
Проходя опрос, пользователь может и должен выбрать только один вариант ответа на каждый из вопросов. Ответы пользователя сохраняются в БД.
-
Пользователь, это User из django.contrib.auth.models.
-
Опросы создаются и публикуются в админке Django. Вопросы и варианты ответа на них создаются прямо на странице создания самого опроса.
-
На веб - интерфейсе отображен список опросов. Опубликованные опросы, упорядоченные по дате создания, в виде списка дат и заголовков. Со списка можно попасть в опрос.
-
Страница опроса. Вверху название опроса. Дальше вариант отображения зависит от того, пройден опрос текущим авторизованным пользователем или нет.
- Если опрос пройден, то показываются вопросы в порядке заданном в админке, под каждым варианты ответа, в порядке заданном в админке, справа от каждого варианта ответа % пользователей, которые выбрали этот вариант. В сумме по каждому вопросу получится 100%.
- Если опрос еще не пройден, то показываются все вопросы, под каждым варианты ответа, и слева от варианта ответа radio button, позволяющий его выбрать. Под вопросами кнопка «отправить». Пользователь должен выбрать один и только один ответ на каждый вопрос и тогда он может отправить форму. Ответы пользователя записываются. После этого опрос пройден и пользователю показывается страница с процентами (см выше). Дважды пройти один опрос пользователь не может.
-
Если пользователь не авторизован, любая страница требующая авторизованного пользователя для своей работы, перебрасывает его на страницу авторизации, где он должен ввести свой логин и пароль. Страница авторизации это стандартный LoginView из django.contrib.auth.views
-
Регистрации новых пользователей нет (но они могут создаваться в админке штатными средствами).
-
Ответы пользователей можно просматривать в списке в админке.
-
Верстка на веб - интерфейсе - bootstrap.
-
Бонус: View на морде унаследованы от Class-based generic views.
-
Бонус: Проект покрыт unit-тестами.