Образовательный сайт на Django.
Проект структурно разделен на 3 приложения: Accounts - отвечающий за профили, Courses - отвечающий за описание курсов на образовательной площадке и Learning - обслуживающий подписки пользователей на курсы. На данный момент созданы только модели данных и доступна панель администратора.
В проекте предусмотрены 3 профиля: Студент, Преподаватель и Суперпользователь.
Стандартный джанго-профиль заменен на собственный User
и расширен
полями, общими для всех профилей, в качестве логина используется адрес электронной
почты.
Профиль Студента является основным для системы и, поскольку пока полностью описывается
базовой пользовательской моделью, представлен в проекте прокси-моделью Student
, которую
при необходимости можно будет расширить связью один-к-одному с базовой.
Профиль Преподавателя Tutor
является расширением базовой модели и представляет
связь один-к-одному.
Суперпользователь - единственный профиль, которому будет доступна административная панель, предполагается, что его можно создавать исключительно из консоли.
Приложение представлено двумя связанными моделями (один-ко-многим): Course
-
описание курсов и Lesson
- описание занятий в рамках курса. Помимо этого модель Course
связана с Tutor
(многие-к-одному); предполагается, что преподаватели являются
создателями и редакторами собственных курсов. Ещё одна связь Course
- Student
(многие-ко-многим) через промежуточную модель learning.CourseSubscription
.
Приложение представлено двумя моделями. CourseSubscription
- промежуточная модель
между курсом и студентом, хранящая дополнительные аттрибуты этой связи; предполагается,
что связь будет образовываться при подписке студента на произвольный курс, ограничивающим
фактором является невозможность преподавателя (автора курса) учится на собственном курсе.
LearningProgress
- модель фиксирует прогресс обучения по занятиям в рамках ранее
созданной подписки.
cp .env.sample .env
docker-compose up --build
Для остановки достаточно выполнить docker-compose down -v
При запуске контейнера с приложением автоматически создается база с пользователями, курсами и подписками. Создается суперпользователь с заданными ADMIN_EMAIL и ADMIN_PASSWORD.
В проекте определены CRUD для модели курсов. Доступ к созданию/изменению/удалению ограничен для авторизованных пользователей с профилем преподавателя.
Для выполнения фоновых задач используется Celery, в качестве брокера сообщений
используется Redis. Соответствующие сервисы настроены в docker-compose. На текущий
момент в фоне выполняется отправка писем от зарегистрированных пользователей
преподавателям (копия письма отправляется на почту администратора). Для регистрации
celery-задач используется django-celery-results
, журнал доступен на
административной странице.
Реализован GraphQL API для моделей пользователей и курсов. Для запроса данных по всем
курсам с преподавателями и студентами, можно выполнить запрос на http://site/graphql
query {
allCourses {
id,
name,
tutor {
user {
id,
fullName,
email
}
}
students {
id,
fullName,
email
}
}
}
Добавлен API /api/v1/
для моделей User
, Course
, CourseSubscription
. Добавлена
поддержка JWT-токенов.