OTUS Homework 4 Сайт "Обучающий сайт"

Оглавление

Описание

Есть 4 модели: Профессора, Студента, Курса и Урока. Главная страница показывает общее количество курсов, далее можно зайти посмотреть список курсов, там их добавить, зайти внутрь курса отредактировать или удалить.

Для работы необходимо указать SECRET_KEY в settings.py и собрать статику в папке static командой

python manage.py collectstatic

Очередь задач

Для работы очереди задач надо установить Redis и питоновскую библиотеку rq. Также в settings.py в переменных FROM_EMAIL, ADMIN_EMAIL надо указать почту админа и от какой почты слать письма. Сама функция не шлет письма, а просто вводит на экран сообщение и спит 5 секунд. Очередь задач вызывается в методе post вьюхи ContactView в файле school/views.py

Frontend

В отдельном приложении frontend сделана сборка вебпаком index.js. Сорс в frontend/src, собирается в project-static/frontend. В навигационном баре есть ссылка Frontend.

Пользователи

Сделан свой пользователь для авторизации. Добавлены два поля, дающие возможность указать студент и/или преподователь. При регистрации По умолчанию пользователю устанавливается значение студента, указать, что это преподаватель может суперпользователь в админке. Преподователи могут добавлять курсы и уроки. И студент, и преподователь могут записаться на курс (кнопка Submit на странице курса).

API

Есть две ссылки в API: api/school/courses/, api/school/lessons/. Авторизация по сессии или по токену. Токен можно сгенерить в профиле. В api/school/courses/ виден список всех курсов, у каждого курса также отображаются студенты, преподаватели и уроки. В api/school/lessons/ показываются все уроки и с каким курсом связаны. Так же уроки можно фильтровать по айдишнику и имени курса, course_id и course соответственно.

Тесты

Тесты API находятся в файле courses/tests.py.

GraphQL

Ссылка на GraphQL есть в навигиционном баре.

Оптимизация работы с БД

До

Screenshot before prefetch

После

Screenshot after prefetch

Домашнее задание

  1. Создать проект "Обучающий сайт". По нему будут задания до конца курса, сначала backend потом frontend. Рекомендуется создать для проекта отдельный репозиторий
  2. Придумать тему (чему будем обучать на сайте) можно любую какая вам наиболее интересна.
  3. Примерное описание работы сайта: Сайт будет похож на OTUS + дополнительный функционал в зависимости от темы. На нем будут курсы, категории, преподаватели, занятия, расписание, ... + доп. функционал в зависимости от выбранной темы. Будут как классические страницы (созданные на сервере), так и api в json
  4. Необходимо создать модели данных (Преподаватель, студент, курс, расписание, ...). Можно не все сразу, а какую то часть и постепенно добавлять новые
  5. Создать связи между моделями
  6. Сделать миграции
  7. Настроить стандартную админку
  8. Заполнить базу некоторыми реальными или тестовыми данными

В проекте добавляем страницы (у нас будут как классические страницы с рендерингом на сервере, так и api с рендерингом на клиенте) 9. Пока добавляем классические страницы с рендерингом на сервере 10. Добавить страницу для просмотра списка курсов 11. Добавить страницу для просмотра одного курса 12. Добавить страницы для создания, удаления, редактирования курса 13. Дополнительно можно добавить любой полезный функционал 14. Так же в проект рекомендуется добавить необходимые базовые и включенные шаблоны

Рекомендуется все view делать с использованием CBV

  1. По возможности покрыть проект тестами, как методов моделей, так и view (для генерации фейковых данных удобно использовать фабрики)

  2. Сдать сайт в виде ссылки на репозиторий (базу используем пока тестовую sqlite) сам файл с базой в репозиторий рекомендуется не заливать

  3. Рекомендуется добавить в репозиторий файл readme с кратким описанием работы системы

  4. Если будет возможность запуска в docker будет вообще супер Критерии оценки: Задание считается выполненным, когда: в проекте есть минимум 2 модели данных, проходят миграции (python manage.py migrate), минимум 2 модели (не считая модель пользователя), добавлены в стандартную админку, есть рабочие страницы для списка курсов и одного курса - 10 баллов